确定窗口消息的优先级

时间:2011-08-27 17:30:19

标签: c winapi message-queue

有没有办法以编程方式检查其消息队列中窗口消息的优先级?

例如:已知某些窗口消息WM_PAINTWM_TIMER具有最低优先级,并且位于具有最高优先级的消息之后。

我正在寻找能够确认两条消息中哪一条具有最低优先级或最高优先级,或者哪条消息将首先发送还是最后发送的内容?

2 个答案:

答案 0 :(得分:18)

这不是它的工作原理,Windows消息没有附加优先级。它主要取决于消息的生成方式。消息循环按以下顺序调度消息:

  • 首先使用SendMessage()生成的任何消息都按照调用的顺序进行调度
  • 接下来,使用PostMessage()生成的任何消息,并按队列顺序存储在消息队列中
  • 接下来,从窗口状态合成的任何消息。 WM_TIMER,WM_PAINT和WM_MOUSEMOVE符合此类别。

“从窗口状态合成”子句使WM_PAINT和WM_TIMER看起来具有低优先级。为什么快速移动鼠标不会使用鼠标消息淹没消息队列。然而,这不是唯一的,你可以调用UpdateWindow()来强制发送WM_PAINT消息,使其以“高优先级”发送。

答案 1 :(得分:1)

订单在GetMessage / PeekMessage文档中定义:

  

如果未指定过滤器,则在下面处理消息   订单:

     
      
  • 已发送邮件
  •   
  • 发布的消息
  •   
  • 输入(硬件)消息和系统内部事件
  •   
  • 再次发送邮件
  •   
  • WM_PAINT消息
  •   
  • WM_TIMER消息
  •