Функция PeekMessageW (winuser.h)
Отправляет входящие неуправляемые сообщения, проверяет очередь сообщений потока для отправленного сообщения и извлекает сообщение (если оно существует).
Синтаксис
BOOL PeekMessageW(
[out] LPMSG lpMsg,
[in, optional] HWND hWnd,
[in] UINT wMsgFilterMin,
[in] UINT wMsgFilterMax,
[in] UINT wRemoveMsg
);
Параметры
[out] lpMsg
Тип: LPMSG
Указатель на структуру MSG, которая получает сведения о сообщении.
[in, optional] hWnd
Тип: HWND
Дескриптор окна, сообщения которого необходимо извлечь. Окно должно принадлежать текущему потоку.
Если hWndNULL, PeekMessage извлекает сообщения для любого окна, которое принадлежит текущему потоку, и все сообщения в очереди сообщений текущего потока, значение NULL (см. структуру MSG). Таким образом, если hWnd null, обрабатываются сообщения окна и потоковые сообщения.
Если
[in] wMsgFilterMin
Тип: UINT
Значение первого сообщения в диапазоне сообщений, которые необходимо проверить. Используйте WM_KEYFIRST (0x0100), чтобы указать первое сообщение клавиатуры или WM_MOUSEFIRST (0x0200), чтобы указать первое сообщение мыши.
Если wMsgFilterMin и wMsgFilterMax равно нулю, PeekMessage возвращает все доступные сообщения (т. е. фильтрация диапазонов не выполняется).
[in] wMsgFilterMax
Тип: UINT
Значение последнего сообщения в диапазоне сообщений, которые необходимо проверить. Используйте WM_KEYLAST, чтобы указать последнее сообщение клавиатуры или WM_MOUSELAST, чтобы указать последнее сообщение мыши.
Если wMsgFilterMin и wMsgFilterMax равно нулю, PeekMessage возвращает все доступные сообщения (т. е. фильтрация диапазонов не выполняется).
[in] wRemoveMsg
Тип: UINT
Указывает способ обработки сообщений. Этот параметр может быть одним или несколькими из следующих значений.
Ценность | Значение |
---|---|
|
Сообщения не удаляются из очереди после обработки PeekMessage. |
|
Сообщения удаляются из очереди после обработки PeekMessage. |
|
Запрещает системе освобождать поток, ожидающий простоя вызывающего объекта (см. раздел WaitForInputIdle).
Объедините это значение с PM_NOREMOVE или PM_REMOVE. |
По умолчанию обрабатываются все типы сообщений. Чтобы указать, что необходимо обработать только определенное сообщение, укажите одно или несколько следующих значений.
Возвращаемое значение
Тип: BOOL
Если сообщение доступно, возвращаемое значение ненулевое.
Если сообщения недоступны, возвращаемое значение равно нулю.
Замечания
PeekMessage извлекает сообщения, связанные с окном, определяемым параметром hWnd или любым его дочерним элементом, указанным функцией IsChild, а также в диапазоне значений сообщений, заданных параметром wMsgFilterMin и wMsgFilterMax. Обратите внимание, что приложение может использовать только низкое слово в параметрах wMsgFilterMin и wMsgFilterMax; Высокое слово зарезервировано для системы.
Обратите внимание, что PeekMessage всегда извлекает WM_QUIT сообщения, независимо от значений wMsgFilterMin и wMsgFilterMax.
Во время этого вызова системные диспетчеры (DispatchMessage) ожидались, неуправляемые сообщения, то есть сообщения, отправленные в окна, принадлежащие вызывающей потоку, с помощью SendMessage, SendMessageCallback, SendMessageTimeoutили функции SendNotifyMessage. Затем извлекается первое сообщение в очереди, соответствующее указанному фильтру. Система также может обрабатывать внутренние события. Если фильтр не указан, сообщения обрабатываются в следующем порядке:
- Отправленные сообщения
- Опубликованные сообщения
- Входные (аппаратные) сообщения и системные внутренние события
- Отправленные сообщения (снова)
- сообщения WM_PAINT
- сообщения WM_TIMER
Функция PeekMessage обычно не удаляет WM_PAINT сообщения из очереди. WM_PAINT сообщения остаются в очереди, пока они не будут обработаны. Однако если сообщение WM_PAINT содержит регион обновления NULL, PeekMessage удаляет его из очереди.
Если окно верхнего уровня перестает отвечать на сообщения более нескольких секунд, система считает, что окно не отвечает и заменяет его тем же окном z-порядка, расположения, размера и визуальных атрибутов. Это позволяет пользователю перемещать его, изменять размер или даже закрывать приложение. Однако это единственные действия, которые доступны, так как приложение на самом деле не отвечает. При отладке приложения система не создает окно призрака.
виртуализация DPI
Этот API не участвует в виртуализации DPI. Выходные данные приведены в режиме окна, на которое предназначено сообщение. Вызывающий поток не учитывается.Примеры
Пример см. в изучении очереди сообщений.
Заметка
Заголовок winuser.h определяет PeekMessage как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 2000 Профессиональный [только классические приложения] |
минимальный поддерживаемый сервер | Windows 2000 Server [только классические приложения] |
целевая платформа | Виндоус |
заголовка | winuser.h (включая Windows.h) |
библиотеки |
User32.lib |
DLL | User32.dll |
набор API | ext-ms-win-ntuser-message-l1-1-0 (представлено в Windows 8) |
См. также
концептуальные
сообщений и очередей сообщений
другие ресурсы
Справочник