确定窗口消息的优先级

cpx*_*cpx 4 c winapi message-queue

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

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

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

Han*_*ant 18

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

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

"从窗口状态合成"子句使WM_PAINT和WM_TIMER看起来具有低优先级.为什么快速移动鼠标不会使用鼠标消息淹没消息队列.然而,这不是排他性的,例如,您可以调用UpdateWindow()来强制发送WM_PAINT消息,使其以"高优先级"进行调度.

  • @David:对于WM_TIMER,MSDN文档http://msdn.microsoft.com/en-us/library/ms644902(v=vs.85).aspx - "消息由GetMessage或PeekMessage函数发布"意味着它是按需生成,而不是由于实际计时器到期而直接发布到队列中.类似的措辞似乎与WM_PAINT一起存在,尽管它在那里不太明确.另外,http://support.microsoft.com/kb/96006补充说:"WM_TIMER和WM_PAINT消息可以被认为是布尔切换",暗示了这一点.我不认为这是在Petzold中,但偶尔会出现在Raymond Chen的博客上. (2认同)