Функция PeekMessage


Функция PeekMessage распределяет входящие отправленные (асинхронные) сообщения, проверяет помещенные в очередь (синхронные) сообщения очереди сообщений потока и извлекает сообщение (если таковое имеется).

Синтаксис

BOOL PeekMessage(
    LPMSG lpMsg,
    HWND hWnd,
    UINT wMsgFilterMin,
    UINT wMsgFilterMax,
    UINT wRemoveMsg
);

Параметры

lpMsg

[out] Указатель на структуру MSG, которая принимает информацию о сообщении.

hWnd

[in] Дескриптор окна, сообщения которого должны быть проверены. Окно должно принадлежать текущему потоку.

Если hWnd - ПУСТО (NULL), функция PeekMessage извлекает сообщения для любого окна, которое принадлежит текущему потоку. Если hWnd - INVALID_HANDLE_VALUE, PeekMessage извлекает сообщения, значение  hWnd которых - ПУСТО (NULL), как помещенные в очередь (синхронные) функцией PostThreadMessage.

wMsgFilterMin

[in] Определяет значение первого сообщения в диапазоне сообщений, которые будут проверены. Используйте сообщение WM_KEYFIRST, чтобы установить первое сообщение клавиатуры или WM_MOUSEFIRST, чтобы установить первое сообщение мыши.

Если параметры wMsgFilterMin и wMsgFilterMax являются оба нулевыми, функция PeekMessage возвращает значение всех доступных сообщений (то есть никакой фильтрации  не выполняется).

wMsgFilterMax

[in] Определяет значение последнего сообщения в диапазоне сообщений, которые будут проверены. Используйте сообщение WM_KEYLAST, чтобы установить первое сообщение клавиатуры или WM_MOUSELAST, чтобы установить последнее сообщение мыши.

Если параметры wMsgFilterMin и wMsgFilterMax являются оба нулевыми, функция PeekMessage возвращает значение всех доступных сообщений (то есть никакой фильтрации не выполняется).

wRemoveMsg

[in] Устанавливает, как сообщения должны обрабатываться. Этот параметр может быть одним из нижеследующих значений.
Значение Предназначение
PM_NOREMOVE Сообщения не удаляются из очереди после обработки функцией PeekMessage. 
PM_REMOVE Сообщения удаляются из очереди после обработки функцией PeekMessage. 

Вам необязательно комбинировать значение PM_NOYIELD или с PM_NOREMOVE или PM_REMOVE.  Этот флажок препятствует системе освобождать какой-либо поток, который ожидает вызывающую программу, чтобы перейти в режим простоя (см. функцию WaitForInputIdle).

По умолчанию, обрабатываются все типы сообщений. Чтобы определить, что должны обрабатываться только некоторые сообщение , установите одно или несколько нижеследующих значений. 

Значение Предназначение
PM_QS_INPUT Windows 98/Me, Windows 2000/XP: Обрабатываются сообщения клавиатуры и мыши. 
PM_QS_PAINT
Windows 98/Me, Windows 2000/XP: Обрабатываются сообщения рисования. 
PM_QS_POSTMESSAGE Windows 98/Me, Windows 2000/XP: Обрабатываются все помещенные в очередь (синхронные) сообщения, включая сообщения таймера и горячих клавиш. 
PM_QS_SENDMESSAGE Windows 98/Me, Windows 2000/XP: Обрабатываются все отправленные (асинхронные) сообщения. 

Возвращаемые значения

Если сообщение доступно, величина возвращаемого значения - не нуль.

Если сообщения не доступны, величина возвращаемого значения нулевая.

Замечания

Функция PeekMessage извлекает сообщения, связанные с окном, идентифицированным параметром hWnd или любого из его дочерних окон, как определено функцией IsChild, и в пределах диапазона значений сообщения, заданных параметрами wMsgFilterMin и wMsgFilterMax.  

Обратите внимание! на то, что приложение может  использовать в параметрах wMsgFilterMin и wMsgFilterMax только младшее слово ; старшее слово зарезервировано для системы.

Обратите внимание! на то, что функция PeekMessage всегда извлекает сообщения WM_QUIT, независимо от того, какие значения Вы задаете для параметров wMsgFilterMin и wMsgFilterMax.

В течение этого вызова, система представляет ожидающие обработки сообщения, которые были отправлены окнам, принадлежащим вызывающему потоку, используя функции SendMessage, SendMessageCallbackSendMessageTimeout или  SendNotifyMessage. Система может также обрабатывать внутренние события. Сообщения обрабатываются в ниже перечисленном порядке:

Чтобы извлекать сообщения о вводе данных перед помещенными в очередь (синхронными) сообщениями, используйте параметры wMsgFilterMin и wMsgFilterMax .

Функция PeekMessage обычно не удаляет сообщения WM_PAINT из очереди. Сообщения остаются в очереди до тех пор, пока не будут обработаны. Однако, если  сообщение WM_PAINT имеет область обновления равную ПУСТО (NULL) , PeekMessage фактически удаляет его из очереди.

Windows XP: Если окно верхнего уровня останавливает ответ на сообщения в течение больше нескольких секунд, система рассматривает это окно, как окно, которое зависло и заменяет его на ложное окно, которое имеет ту же самую Z - последовательность, местоположение, размер и визуальные атрибуты. Это дает возможность пользователю перемещать его, изменять его размеры, или даже закрыть приложение. Однако, это - единственные доступные действия, потому что приложение фактически зависает. Когда приложение в режиме отладчика, система не создает ложное окно.

Windows 95/98/Me: PeekMessageW поддерживается  подпрограммой Microsoft Layer for Unicode (MSLU). Чтобы использовать подпрограмму, Вы должны добавить некоторые файлы к вашему приложению, как это определено в Microsoft Layer for Unicode для систем Windows 95/98/Me.

Пример

Пример смотри в статье  Поставленные в очередь (синхронные) сообщения.

Смотри также

Обзор Сообщения и очереди сообщений, GetMessageIsChildMSGWaitForInputIdleWaitMessage

Размещение и совместимость PeekMessage

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да версии 3.1 и выше

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

User32.lib

Заголовочный файл

 

- объявлено в

Winuser.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

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

Hosted by uCoz