利用WINDOWS的消息机制进行截断视频的循环显示
2014-05-02 20:55
316 查看
今天使用MFC界面进行摄像头的视频的显示,从摄像头抓取每一帧并循环在picture控件里显示,但是遇到一个问题就是因为是在while循环中显示,只要摄像头有视频传入,while循环就不会退出,后面的操作就没办法进行,可以利用WINDOWS的消息机制进行解决。
1,
void C_2DTo3DDlg::OnBnClickedStmeadis()
{
// TODO: 在此添加控件通知处理程序代码
//
HWND hwnd;
MSG msg;
Mat frame;
BOOL isdone=FALSE;
if(lfCam.isOpened())
{
while(!isdone)
{
lfCam>>frame;
F_ShowImage( frame, m_lfImage, IDC_LeftPicture );
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) //点击右键或有键盘按键时退出视频显示
{
switch(msg.message)
{
case WM_RBUTTONDOWN:
case WM_KEYDOWN:
//
// Perform any required cleanup.
//
isdone = TRUE;
}
}
}
}
return;
}
2,直接if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
也行,就不用switch了。
3,用了setTimer函数,http://blog.csdn.net/watkinsong/article/details/7360941
语法:
BOOLPeekMessage(LPMSGIpMsg,HWNDhWnd,UINTwMSGfilterMin,UINTwMsgFilterMax,UINTwRemoveMsg
);
lpMsg
接收消息信息的MSG结构指针。
hWnd
其消息被检查的窗口句柄。
wMsgFilterMin
指定被检查的消息范围里的第一个消息。
wMsgFilterMax
指定被检查的消息范围里的最后一个消息。
wRemoveMsg
确定消息如何被处理。此参数可取下列值之一[1]:
1,
void C_2DTo3DDlg::OnBnClickedStmeadis()
{
// TODO: 在此添加控件通知处理程序代码
//
HWND hwnd;
MSG msg;
Mat frame;
BOOL isdone=FALSE;
if(lfCam.isOpened())
{
while(!isdone)
{
lfCam>>frame;
F_ShowImage( frame, m_lfImage, IDC_LeftPicture );
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) //点击右键或有键盘按键时退出视频显示
{
switch(msg.message)
{
case WM_RBUTTONDOWN:
case WM_KEYDOWN:
//
// Perform any required cleanup.
//
isdone = TRUE;
}
}
}
}
return;
}
2,直接if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
也行,就不用switch了。
3,用了setTimer函数,http://blog.csdn.net/watkinsong/article/details/7360941
语法:
BOOLPeekMessage(LPMSGIpMsg,HWNDhWnd,UINTwMSGfilterMin,UINTwMsgFilterMax,UINTwRemoveMsg
);
参数
lpMsg接收消息信息的MSG结构指针。
hWnd
其消息被检查的窗口句柄。
wMsgFilterMin
指定被检查的消息范围里的第一个消息。
wMsgFilterMax
指定被检查的消息范围里的最后一个消息。
wRemoveMsg
确定消息如何被处理。此参数可取下列值之一[1]:
值 | 意义 |
---|---|
PM_NOREMOVE | PeekMessage处理后,消息不从队列里除掉。 |
PM_REMOVE | PeekMessage处理后,消息从队列里除掉。 |
PM_NOYIELD | 此标志使系统不释放等待调用程序空闲的线程。可将PM_NOYIELD随意组合到PM_NOREMOVE或PM_REMOVE。 |
相关文章推荐
- 9.VC(custom)-windows消息机制(消息循环)
- windows下利用ffmpeg进行视频格式转换
- 【Windows编程】Step.2 消息循环机制
- 一个简单的Windows程序及消息循环机制
- windows 消息循环机制
- 利用Windows消息循环实现消息延迟和消息合并
- c# winform 利用 windows media player 循环播放视频
- Windows事件驱动机制及消息循环
- c# winform 利用 windows media player 循环播放视频
- windows 的事件驱动机制和消息循环
- Linux下利用V4L2进行视频采集及其显示
- MFC---理解Windows消息循环机制
- ROS中利用opencv3完成四个视频流拼接成一副图像显示,并添加track条进行参数调节
- Windows事件驱动机制及消息循环
- Windows事件驱动机制及消息循环
- golang---利用反射机制对结构体进行循环赋值
- 利用双向循环链表进行显示更新
- Qt事件机制浅析(定义,产生,异步事件循环,转发,与信号的区别。感觉QT事件与Delphi的事件一致,而信号则与Windows消息一致)
- c# winform 利用 windows media player 循环播放视频
- windows消息循环机制