首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有像PeekMessage这样的函数不处理消息吗?

有像PeekMessage这样的函数不处理消息吗?
EN

Stack Overflow用户
提问于 2009-07-15 19:37:27
回答 5查看 6.4K关注 0票数 6

我只是想给你打电话

代码语言:javascript
复制
PeekMessage(&msg, 0, WM_KEYDOWN, WM_KEYUP, PM_NOREMOVE | PM_NOYIELD);

PeekMessage调用中的Windows 64是处理消息的。其结果是,我将重新进入我的画图调用,以及各种其他代码。

在我们的应用程序中,绘制可能需要几秒钟,因此我们添加了PeekMessage调用,以查看用户是否按下一个键,这样我们就可以中断该绘制并启动下一个。我们几乎没有意识到Windows可以开始处理我们身上的消息。把真正的绘画作品放在一个单独的线里是一个重大的重构.我们正在尝试查看是否按下了特定的键,或者鼠标轮是否旋转或鼠标按钮被单击,以中断呈现。

我尝试过专门添加代码以防止重入,然后再向队列中注入油漆消息,等等。这都是非常简单的,而且在某些情况下,它不能正常工作。

我可以在PeekMessage调用中添加一些标志吗?我在MSDN的文档中没有看到任何新的东西。我真的需要一个不处理消息的PeekMessage。帮助!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-15 19:45:48

也许我错过了显而易见的,但是规范相当冗长说它会这么做

PeekMessage函数分发传入的发送的消息,检查线程消息队列中的已发布消息,并检索消息(如果存在的话)。

..。

在此调用期间,系统传递挂起的、非排队的消息,即使用SendMessage、SendMessageCallback、SendMessageTimeout或SendNotifyMessage函数将消息发送到调用线程拥有的窗口。然后检索与指定筛选器匹配的第一个排队消息。系统还可以处理内部事件。如果未指定筛选器,则按以下顺序处理邮件:

  • 发送消息
  • 张贴的信息
  • 输入(硬件)消息和系统内部事件
  • 发送的消息(再次)
  • WM_PAINT消息
  • WM_TIMER消息

若要在发布邮件之前检索输入消息,请使用wMsgFilterMin和wMsgFilterMax参数。

票数 5
EN

Stack Overflow用户

发布于 2010-09-13 20:15:37

GetQueueStatus是检查是否有可用消息的最快方法。它将只检查几个标志,只接受一个参数,而不是5个参数的peekmessage。如果有可用的消息,它会给出一个快速提示,它不会以任何方式处理该消息。

GetQueueStatus和GetInputStatus是相关的功能。

票数 3
EN

Stack Overflow用户

发布于 2009-07-15 19:49:32

我认为这就是PeekMessage应该做的。它和GetMessage之间唯一的区别是,GetMessage阻塞直到消息到达,而PeekMessage将返回TRUE或FALSE,这取决于是否找到匹配筛选器的消息。如果找到消息,它仍将处理它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1133507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档