利用WINDOWS的消息机制进行截断视频的循环显示

本文详细介绍了如何使用MFC界面在Windows系统中从摄像头抓取视频帧,并通过Windows消息机制实现点击右键或键盘按键时退出视频显示的功能。包括使用PeekMessage函数检查消息队列,灵活地控制视频播放流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天使用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了。


语法:
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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值