1、在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中初始化视频
HWND hwnd;
this->videoDlg[0].GetDlgItem(IDC_VLocal,&hwnd); //videoDlg[0]是多视频窗口里面的本地视频窗口
SLocal=new CStatic();
SLocal->SubclassWindow(hwnd); 2、双击本地视频videoDlg后,视频切换到主视频窗口mainvideodlg中显示。代码如下:
void CMainFrame::ShowVideo()
{
if(videoDlg[0].m_bOpen)
{
HWND hwnd;
this->mainvideodlg->GetDlgItem(IDC_VMain,&hwnd);
SLocal=new CStatic();
SLocal->SubclassWindow(hwnd);
}
}
3、现在的问题是,当我关闭主视频窗口后,把视频切换回来,又调用下面的代码:
HWND hwnd;
this->videoDlg[0].GetDlgItem(IDC_VLocal,&hwnd); //videoDlg[0]是多视频窗口里面的本地视频窗口
SLocal=new CStatic();
SLocal->SubclassWindow(hwnd);
结果运行时,关闭主视频窗口后,程序崩溃!!为什么?高手请指教,谢谢!!
this->videoDlg[0].GetDlgItem(IDC_VLocal,&hwnd);
SLocal=new CStatic();
SLocal->SubclassWindow(hwnd);
本地视频初始化代码去掉后,运行也崩溃,跟踪后发现问题出在下面的代码中:
void CMainFrame::OnVideoData(CStatic* Rect,char* Video)
{
RECT rc;
Rect->GetClientRect(&rc);
HDC hdc=::GetDC(Rect->m_hWnd);//这里有问题。不知怎么回事?
HBITMAP m_hBmp=CreateCompatibleBitmap(hdc,rc.right,rc.bottom);
HDC hMemDC=CreateCompatibleDC(hdc);
HBITMAP hob=(HBITMAP)SelectObject(hMemDC,m_hBmp);
if(hob)
{
char* p;
p=Video;
BITMAPINFOHEADER* pbih=&m_CodecMgr[0].m_BmpU.bmiHeader;
HDRAWDIB h=DrawDibOpen();
DrawDibDraw(h,hMemDC,0,0,rc.right,rc.bottom,pbih,p,0,0,pbih->biWidth,pbih->biHeight,DDF_NOTKEYFRAME);
DrawDibClose(h);
BitBlt(hdc,0,0,rc.right,rc.bottom,hMemDC,0,0,SRCCOPY);
SelectObject(hMemDC,hob);
pbih=NULL;
delete pbih;
}
DeleteDC(hMemDC);
::ReleaseDC(Rect->m_hWnd,hdc);
DeleteObject(m_hBmp);
}高手帮我看看怎么解决?谢谢!!