www.gusucode.com > 基于VC++的局域网视频聊天系统源码程序 > 基于VC++的局域网视频聊天系统源码程序/code/ChatClient/LocalDlg.cpp

    // LocalDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ChatClient.h"
#include "ChatClientDlg.h"
#include "LocalDlg.h"
#include "VideoCapture.h"
#include "VideoCodec.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLocalDlg dialog


CLocalDlg::CLocalDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLocalDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLocalDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CLocalDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLocalDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	    DDX_Control(pDX, IDC_VIEWLOCAL, m_VLocal);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLocalDlg, CDialog)
	//{{AFX_MSG_MAP(CLocalDlg)
	ON_BN_CLICKED(IDC_VIEWLOCAL, OnViewlocal)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLocalDlg message handlers

BOOL CLocalDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
		HANDLE h=(HANDLE)1;
	::SetProp(m_hWnd,_T("视频聊天"),h);

	SetWindowText(_T("视频聊天"));
	m_hdc = GetDC()->m_hDC ;
	m_VidLocal	= TRUE;


	m_Video_x=7;
	m_Video_y=30;

	//make the title bar region
/*	POINT pt[3];
	pt[0].x =m_Video_x;		pt[0].y =m_Video_y;
	pt[1].x=m_Video_x+176;	pt[1].y =m_Video_y;
	pt[2].x=m_Video_x+176;	pt[2].y =m_Video_y+144;*/


	hdib = NULL;
//	m_bExitNow = FALSE;
	DeleteObject(m_hVideoRgn);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CLocalDlg::DisplayRemoteFrame(unsigned char *data, int size)
{
//	if(m_bExitNow )	return;
	if(data == NULL || size<=0)	return;
	
	if( m_VidLocal && m_pRemoteDlg)
		m_pRemoteDlg->DisplayRemoteFrame (data,size);
	else 
		if(!m_VidLocal)
		::DrawDibDraw(hdib,
				  m_hdc,
				  m_Video_x,		// dest : left pos
				  m_Video_y,		// dest : top pos
				  176,					 // don't zoom x
				  144,					 // don't zoom y
				  &m_bmpinfo->bmiHeader,	 // bmp header info
				  data,					 // bmp data
				  0,					 // src :left
				  0,					 // src :top
				  IMAGE_WIDTH,				 // src : width
				  IMAGE_HEIGHT,				 // src : height
				  DDF_SAME_DRAW			 // use prev params....
				  );
}

void CLocalDlg::SetParent(CDialog *pdialog)
{
   pdlg = pdialog;
   //////////////////////////////////////////////////////////////////////////
   m_pRemoteDlg = &((CChatClientDlg*)pdlg)->m_RemoteDlg;
   //////////////////////////////////////////////////////////////////////////
   
}

void CLocalDlg::FreeSource()
{
//	DeleteObject(m_hTitleRgn);
	DeleteObject(m_hVideoRgn);
	if(hdib!=NULL)
	{
		::DrawDibEnd(hdib);
		::DrawDibClose(hdib);
	}

}

void CLocalDlg::OnViewlocal() 
{
	// TODO: Add your control notification handler code here
	m_VidLocal =!m_VidLocal;
	if(m_VidLocal)
	{
		m_VLocal.SetWindowText (_T("本地"));
		SetWindowText(_T("本地视频"));
		m_pRemoteDlg->SetWindowText(dcontrol.remotename);

	}
	else
	{
		m_VLocal.SetWindowText (_T("远程"));
		SetWindowText(dcontrol.remotename);
		m_pRemoteDlg->SetWindowText(_T("本地视频"));
	}
	Invalidate (TRUE);	
}