Функция 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: Обрабатываются сообщения клавиатуры и мыши. |
|
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, SendMessageCallback, SendMessageTimeout или SendNotifyMessage. Система может также обрабатывать внутренние события. Сообщения обрабатываются в ниже перечисленном порядке:
- Отправленные (асинхронные) сообщения
- Помещенные в очередь (синхронные) сообщения
- Сообщения о вводе (аппаратном) данных и внутренние события
- Отправленные (асинхронные) сообщения (ещё раз)
- Сообщение WM_PAINT
- Сообщение WM_TIMER
Чтобы извлекать сообщения о вводе данных перед помещенными в очередь (синхронными) сообщениями, используйте параметры 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.
Пример
Пример смотри в статье Поставленные в очередь (синхронные) сообщения.
Смотри также
Обзор Сообщения и очереди сообщений, GetMessage, IsChild, MSG, WaitForInputIdle, WaitMessage
Размещение и совместимость 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 |
Нет |
Замечания по платформе |
Не имеется |