开发环境: Win7 + VS2008 + VFW
一. 最基础的调用
1.1 初始化
BOOL CMyDlg::Init()
{
// HWND m_hWndVideo;
// 创建捕捉窗口
m_hWndVideo = capCreateCaptureWindow(
_T("abcd"), // 窗口名称
WS_POPUP, // Windows窗口的属性
1, 1, 10, 10, // 窗口的位置和大小
0, // 父窗口
0 // 我这里使用0, 如果是非0, 就创建失败, 不知为什么.
);
// 连接设备.
// 在Win7下, capDriverConnect有时会调用失败, 所以需要使用一个循环来知道调用成功为止.
// 当然, 最好加上挑除循环的判断, 否则在没有插入摄像头时, 会死循环.
while(FALSE == (capDriverConnect(m_hWndVideo, 0)))
{
Sleep(10);
}
m_bCapture=TRUE;
// 设置视频窗口的一些属性, 这些都是Windows窗口的一些属性
// 不设置也可以, 看你的需求.
::SetParent(m_hWndVideo, *this);
::SetWindowLong(m_hWndVideo, GWL_STYLE,WS_CHILD);
// 设置位置
CRect m_rect;
m_panel.GetClientRect(m_rect);
m_panel.MapWindowPoints(this,m_rect);
m_rect.DeflateRect(1,1,1,1);
::SetWindowPos(m_hWndVideo,NULL,m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height(),SWP_NOZORDER);
// 显示窗口
::ShowWindow(m_hWndVideo, SW_SHOW);
return true;
}
1.2 播放视频
void CMyDlg::OnBtnPreview()
{
// TODO: Add your control notification handler code here
if(m_bCapture)
{
// 播放前, 一定要设置帧率, 否则不能播放
capPreviewRate(m_hWndVideo, 15); // 设置预览帧频率 每15ms播放一帧
capPreviewScale(m_hWndVi