Определить приоритет сообщения окна - PullRequest
4 голосов
/ 27 августа 2011

Есть ли способ программно проверить приоритет оконных сообщений в его очереди сообщений?

Например: Некоторые из оконных сообщений WM_PAINT и WM_TIMER известны с наименьшим приоритетом и имеютпосле сообщений с наивысшим приоритетом.

Я ищу что-то, с помощью чего вы можете подтвердить, что одно из двух сообщений будет иметь самый низкий или самый высокий приоритет или какое сообщение будет отправлено первым или последним?

Ответы [ 2 ]

18 голосов
/ 27 августа 2011

Это не совсем так, сообщения Windows не имеют приоритета.Это в основном определяется тем, как генерируется сообщение.Цикл сообщений отправляет сообщения в следующем порядке:

  • сначала все сообщения, созданные с помощью SendMessage (), отправляются в том порядке, в котором были сделаны вызовы
  • , затем все сообщения, созданные с помощью PostMessage() и сохраняются в очереди сообщений, в порядке очереди
  • , далее любые сообщения, которые синтезируются из состояния окна.WM_TIMER, WM_PAINT и WM_MOUSEMOVE соответствуют этой категории.

Предложение «синтезировано из состояния окна» - это то, что заставляет WM_PAINT и WM_TIMER иметь низкий приоритет.И почему быстрое перемещение мыши не приводит к переполнению очереди сообщений мышью.Это, однако, не является исключительным, вы можете, например, вызвать UpdateWindow () для принудительной отправки сообщения WM_PAINT, что делает его отправленным с «высоким приоритетом».

1 голос
/ 29 января 2019

Порядок определяется в GetMessage / PeekMessage документации:

Если фильтр не указан, сообщения обрабатываются в следующем порядке:

  • Отправленные сообщения
  • Отправленные сообщения
  • Входные (аппаратные) сообщения и внутренние события системы
  • Отправленные сообщения (снова)
  • WM_PAINTсообщения
  • сообщения WM_TIMER
...