我只是想给你打电话
PeekMessage(&msg, 0, WM_KEYDOWN, WM_KEYUP, PM_NOREMOVE | PM_NOYIELD);PeekMessage调用中的Windows 64是处理消息的。其结果是,我将重新进入我的画图调用,以及各种其他代码。
在我们的应用程序中,绘制可能需要几秒钟,因此我们添加了PeekMessage调用,以查看用户是否按下一个键,这样我们就可以中断该绘制并启动下一个。我们几乎没有意识到Windows可以开始处理我们身上的消息。把真正的绘画作品放在一个单独的线里是一个重大的重构.我们正在尝试查看是否按下了特定的键,或者鼠标轮是否旋转或鼠标按钮被单击,以中断呈现。
我尝试过专门添加代码以防止重入,然后再向队列中注入油漆消息,等等。这都是非常简单的,而且在某些情况下,它不能正常工作。
我可以在PeekMessage调用中添加一些标志吗?我在MSDN的文档中没有看到任何新的东西。我真的需要一个不处理消息的PeekMessage。帮助!
发布于 2009-07-15 19:45:48
也许我错过了显而易见的,但是规范相当冗长说它会这么做
PeekMessage函数分发传入的发送的消息,检查线程消息队列中的已发布消息,并检索消息(如果存在的话)。
..。
在此调用期间,系统传递挂起的、非排队的消息,即使用SendMessage、SendMessageCallback、SendMessageTimeout或SendNotifyMessage函数将消息发送到调用线程拥有的窗口。然后检索与指定筛选器匹配的第一个排队消息。系统还可以处理内部事件。如果未指定筛选器,则按以下顺序处理邮件:
若要在发布邮件之前检索输入消息,请使用wMsgFilterMin和wMsgFilterMax参数。
发布于 2010-09-13 20:15:37
GetQueueStatus是检查是否有可用消息的最快方法。它将只检查几个标志,只接受一个参数,而不是5个参数的peekmessage。如果有可用的消息,它会给出一个快速提示,它不会以任何方式处理该消息。
GetQueueStatus和GetInputStatus是相关的功能。
发布于 2009-07-15 19:49:32
我认为这就是PeekMessage应该做的。它和GetMessage之间唯一的区别是,GetMessage阻塞直到消息到达,而PeekMessage将返回TRUE或FALSE,这取决于是否找到匹配筛选器的消息。如果找到消息,它仍将处理它们。
https://stackoverflow.com/questions/1133507
复制相似问题