原来这个vfw视频是基于对话框的,相关代码如下: 
BOOL CTVMeetingDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
SLocal=(CStatic *)GetDlgItem(IDC_VLocal);//IDC_VLocal是picture控件
InitAV();
    return TRUE;  
}现在我想把它移到文档类型下实现。我新建了一个CVideoDlg窗体,同样放置了一个picture控件IDC_VLocal, 
在MainFrame.h声明: CVideoDlg videodlg[5];//显示5个视频浮动窗体。 
窗体创建没问题,接下来就是怎么显示视频的问题了,我想用下面的方法显示第一个视频: 
int CMainFrame::OnCreate( LPCREATESTRUCT lpCreateStruct ) 

    if ( CFrameWnd::OnCreate( lpCreateStruct ) == -1 )         return -1; 
SLocal=(CStatic *)this->videodlg[0].GetDlgItem(IDC_VLocal); InitAV(); 
    
    return 0;  
} 但是编译没错!!但是运行程序还没出现视频就崩溃了。这个问题困扰很久了,没办法请高手帮忙,报酬没问题,说到做到。谢谢!! 
源码下载地址:http://www.yuanshengkj.com/bbs/topic.asp?topic_id=1831&forum_id=39

解决方案 »

  1.   

    程序改成下面这样没问题,说明视频捕获没问题,只是视频显示格式的问题 
    int CMainFrame::OnCreate( LPCREATESTRUCT lpCreateStruct ) 

        if ( CFrameWnd::OnCreate( lpCreateStruct ) == -1 )         return -1; 
    SLocal=(CStatic *)this; InitAV(); 
        
        return 0;  

      

  2.   

    视频显示格式代码:
    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.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); 
      

  3.   

    参见:
    http://snipurl.com/cppcode8828