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; }