告诉 Windows 处理除一条消息之外的所有消息
我有一个由消息触发的函数(由我定义的 WM_ONDATA),该函数将执行此代码:
MSG msg;
while(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if( !AfxGetApp()->PumpMessage() )
{
::PostQuitMessage(0);
return 0;
}
}
return 1;
问题是消息队列上可能存在另一条可以触发该函数的消息。
我想知道是否可以让它处理除 WM_ONDATA 之外的所有消息?
I have a function triggered by a message(WM_ONDATA defined by me) the function will execute this code :
MSG msg;
while(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if( !AfxGetApp()->PumpMessage() )
{
::PostQuitMessage(0);
return 0;
}
}
return 1;
The problem is that there could be on the message queue another message that could trigger the function.
I'm wondering if I can make it process all the message but WM_ONDATA?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
回想一下,PeekMessage 的第三个和第四个参数允许您指定消息值的范围。超出该范围的消息将不会被处理。
Recall that the third and fourth parameters to PeekMessage let you specify a range of message values. Messages outside that range won't be processed.
您可以让窗口过程忽略该消息或将其执行排队。如果你只是想避免递归,那么有一个重入锁
......
你可能会喜欢一个作用域 RIIA 结构(这样事情就会异常安全并且稍微不那么冗长)
You could get the window proc to ignore the message or to queue it's execution. If you're just looking to avoid recursion, have a reentrance lock
....
You could get fancy with a scoped RIIA struct (so things will be exception safe and slightly less verbose)
当然可以 - 只需在收到后检查 msg 中的消息编号即可。
Sure - just check the message number in msg after receipt.