#include "vfw.h"
HWND ghCapWnd;
CAPDRIVERCAPS gCapDrvCaps;
CString gCapFilename;
LRESULT CALLBACK FrameCallbackProc(HWND ghWnd, LPVIDEOHDR lpVData)
{
if (!ghCapWnd)
return FALSE;
//圖像處理代碼
return (LRESULT) TRUE ;
}
//在OnInitDialog中添加初始化代碼
CWnd *pWnd;
CRect rect;
pWnd = AfxGetMainWnd()->GetDlgItem(IDC_PIC);
pWnd->GetWindowRect(&rect);
pWnd->GetSafeHwnd();
ghCapWnd = capCreateCaptureWindow((LPCTSTR)(_T("視頻窗")),
WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME,
0,
0,
rect.Width(),
rect.Height(),
pWnd->GetSafeHwnd(),
0);
ASSERT(ghCapWnd);
if (capDriverConnect(ghCapWnd, 0))/*判斷采集窗口是否與0號捕獲卡驅動(dòng)程序相連接,這里采用簡(jiǎn)化的方法,因只一塊捕獲卡,計算機自動(dòng)登記號碼通常是為0*/
{
capDriverGetCaps(ghCapWnd, &gCapDrvCaps, sizeof(CAPDRIVERCAPS)); /*作默認值初始化,并得到驅動(dòng)器的性能,存入CAPDRIVERCAPS結構中*/
if (gCapDrvCaps.fCaptureInitialized) //如初始化成功
{
capPreviewRate(ghCapWnd, 33); //設置預視幀頻
capPreview(ghCapWnd, TRUE); /*設置成預視模式(preview),該方式是通過(guò)內存作為緩沖區來(lái)存放視頻數據,它是獲得視頻數據的必要條件。另一種稱(chēng)為Overlay模式,它是不經(jīng)過(guò)內存而直接將數據傳入顯存中。它不符合我們要求。*/
capSetCallbackOnFrame(ghCapWnd, FrameCallbackProc); //設置每幀結束后所調用的回調函數(第二部作解釋?zhuān)?br> }
else{//初始化不成功
AfxMessageBox("捕獲卡初始化失敗"); //初始化不成功的消息框顯示
AfxGetMainWnd()->PostMessage(WM_CLOSE);//發(fā)送WM_CLOSE消息,關(guān)閉對話(huà)框
}
}
else{//連接不成功
AfxMessageBox("捕獲卡連接失敗"); //連接不成功的消息框顯示
}
//在OnDestroy中加入結束采集代碼
capDriverDisconnect(ghCapWnd); //斷開(kāi)視頻窗口與捕獲驅動(dòng)程序的連接