【问题标题】:is PeekMessageW function actually dispatching the message?PeekMessageW 函数实际上是在发送消息吗?
【发布时间】:2019-03-14 08:31:55
【问题描述】:

在 Microsoft 的文档中,它声明了 PeekMessageWdispatch 消息(如果有)。

但是为什么在这种情况下需要DispatchMessageW 函数?我可以收集的几个示例同时使用两者,在 PeekMessage/GetMessage 之后调用 DispatchMessage。

我还可以通过实验观察到 peekMessage 不会发送消息,但似乎只查看消息队列。

【问题讨论】:

  • PeekMessage 调度发送的消息。您在消息循环中使用 DispatchMessage 来调度排队的消息。
  • 阅读您链接到的第一页上的备注部分。

标签: c++ winapi


【解决方案1】:

PeekMessageW 的行为已记录在案:

在此调用期间,系统传递待处理的非排队消息,即使用SendMessageSendMessageCallbackSendMessageTimeoutSendNotifyMessage 函数发送到调用线程拥有的窗口的消息。然后检索与指定过滤器匹配的第一个排队消息。

Messages and Message Queues 解释了术语以及基本原理。

【讨论】: