Постановка в очередь сообщений


Прикладная программа обычно помещает сообщение в очередь , чтобы уведомить конкретное окно об исполнении задачи. Функция PostMessage создает структуру MSG для сообщения и копирует сообщение в очередь сообщений. Цикл обработки сообщений приложения, в конечном счете, извлекает сообщение и распределяет его соответствующей оконной процедуре.

Прикладная программа может поместить в очередь сообщение не для заданного окна. Если приложение, при вызове PostMessage, дает дескриптор окна равный NULL, сообщение помещается в очередь, связанную с текущим потоком. Поскольку  дескриптор окна не определен, прикладная программа должна обработать это сообщение в цикле обработки сообщений. Это является одним из способов, чтобы создать сообщение, которое применяется ко взятой в целом прикладной программе, вместо конкретного окна.

Время от времени, у вас может возникать потребность поместить сообщение в очереди всех окон верхнего уровня в системе.  Приложение может поместить сообщение в очереди всех окон верхнего уровня путем вызова функции PostMessage, если в параметре hwnd определить флажок HWND_TOPMOST

Стандартная ошибка программирования состоит в том, что предполагается, что функция PostMessage всегда помещает в очередь сообщение. Это не истина в случае, когда очередь сообщений заполнена. Приложение должно проверить возвращаемое значение функцией PostMessage, чтобы установить, помещалось ли сообщение  в очередь и, если этого не было, повторно  поместить его в очередь.

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz