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

    // RemoteDlg.cpp : implementation file
//

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

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

/////////////////////////////////////////////////////////////////////////////
// CRemoteDlg dialog


CRemoteDlg::CRemoteDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CRemoteDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRemoteDlg)
	//}}AFX_DATA_INIT
	hdib=NULL;
}


void CRemoteDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRemoteDlg)
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRemoteDlg, CDialog)
	//{{AFX_MSG_MAP(CRemoteDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRemoteDlg message handlers

BOOL CRemoteDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	HANDLE h = (HANDLE)1;
//	::SetProp(m_hWnd,_T("远程视频"),h);
//	SetWindowText (_T("远程视频"));
	m_bHilight=FALSE;
	m_Last=FALSE;
	m_hdc = GetDC()->m_hDC;
	RECT rc;
	GetClientRect(&rc);

	m_Width=rc.right -rc.left;
	m_Height=rc.bottom -rc.top;

	POINT pt[3];
	m_Video_x = 2;	m_Video_y=18;
	pt[0].x=m_Video_x;		pt[0].y=m_Video_y;
	pt[1].x=m_Video_x+IMAGE_WIDTH;	pt[1].y=m_Video_y;
	pt[2].x=m_Video_x+IMAGE_WIDTH;	pt[2].y=m_Video_y+IMAGE_HEIGHT;
	
	hdib=NULL;
	m_bVideoIn = FALSE;
//	m_bZoomed	= FALSE;
	DeleteObject(m_hVideoRgn);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CRemoteDlg::DisplayRemoteFrame(unsigned char *data, int size)
{
	int i=0,j=0;
	RECT rc;
	if(data == NULL || size<=0)		return;
	m_bVideoIn =TRUE;
	if(!hdib)
	{// 1st time display,setup paras
		m_bmpinfo=((CChatClientDlg *)pdlg)->m_bmpinfo;
		GetClientRect(&rc);
		m_Width=rc.right -rc.left;
		m_Height=rc.bottom -rc.top;
		hdib=::DrawDibOpen();
		if(hdib!=NULL)
		{
			::DrawDibBegin(hdib,
				m_hdc,
				-1,				// don't stretch
				-1,				// don't stretch
				&m_bmpinfo->bmiHeader,
				IMAGE_WIDTH,         // width of image
				IMAGE_HEIGHT,        // height of image
				0				
				);
		}
	}
	else
		::DrawDibDraw(hdib,
		m_hdc,
				  m_Video_x,		// dest : left pos
				  m_Video_y,		// dest : top pos
				  m_bZoomed?2*IMAGE_WIDTH:-1,		// zoom x
				  m_bZoomed?2*IMAGE_HEIGHT:-1,		// 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 CRemoteDlg::SetParent(CDialog *pdialog)
{
     pdlg = pdialog;
}

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

}