前两篇已经实现了视频捕获,显示,控制显示大小和速率

这一篇的目标是将捕获的视频放到一个矩形的窗口中显示

1)在资源试图中的Dialog中增加一个Picture Control 控件,设置该控件的属性

状态为:带边框,有凹陷

类型为:矩形

2)为该控件添加变量 CStatic m_CapPicture

3)在Ctest1Dlg::OnInitDialog中增加如下代码

CRect rc;
 m_CapPicture.GetClientRect(rc);
 m_CapPicture.MapWindowPoints(this,rc);

 m_hWndVideo = capCreateCaptureWindow(NULL,WS_POPUP,1,1,rc.Width(),rc.Height(),m_hWnd,0);
 if(capDriverConnect(m_hWndVideo,0))
 {
  ::SetParent(m_hWndVideo,*this);
  ::SetWindowLong(m_hWndVideo,GWL_STYLE,WS_CHILD);

  ::SetWindowPos(m_hWndVideo,NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_NOZORDER);
  ::ShowWindow(m_hWndVideo,SW_SHOW);

  capGetVideoFormat(m_hWndVideo, &m_bmpinfo, sizeof(m_bmpinfo));

  m_bmpinfo.bmiHeader.biWidth = IMAGE_WIDTH;
  m_bmpinfo.bmiHeader.biHeight = IMAGE_HEIGHT;

  capSetVideoFormat(m_hWndVideo, &m_bmpinfo, sizeof(m_bmpinfo));
  capPreviewRate(m_hWndVideo,10);
  capPreview(m_hWndVideo,TRUE);
   }
 else
 {
    MessageBox(_T("Connection a capture driver error!"));
 }

4)测试运行,发现视频在矩形中没有按比例全部显示出来

5)增加支持按比例显示的语句

在上面的capPreview(m_hWndVideo,TRUE);语句后面再加一条
 

capPreviewScale(m_hWndVideo,TRUE);

 

总结:在本篇解决了在矩形图片控件中显示,并且按比例显示