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); 
结果运行时,关闭主视频窗口后,程序崩溃!!为什么?高手请指教,谢谢!!

解决方案 »

  1.   

    我把int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)里面的:HWND 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);
    }高手帮我看看怎么解决?谢谢!!