Функция PostMessage помещает (вставляет в очередь) сообщение в очередь сообщений, связанную с потоком, который создал заданное окно и возвращает значение без ожидания потока, который обрабатывает сообщение.
Чтобы поместить сообщение в очереди сообщений связанной с потоком, используйте функцию PostThreadMessage.
Синтаксис
BOOL PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); |
Параметры
hWnd
[in] Дескриптор окна, оконная процедура которого должна принять сообщение. Два значения имеют специальные предназначения:
Значение
Предназначение
HWND_BROADCAST
Сообщение помещается в очередях всех окон верхнего уровня в системе, включая заблокированные или невидимые не имеющие владельца окна, перекрывающие и выскакивающие окна. Сообщение не помещается в очередях дочерних окон.
NULL
Функция ведет себя подобно вызванной функции PostThreadMessage с параметром dwThreadId установленным как идентификатор текущего потока.
Msg
[in] Определяет сообщение, которое должно быть поставлено в очередь.wParam
[in] Определяет дополнительную конкретизирующую сообщение информацию.lParam
[in] Определяет дополнительную конкретизирующую сообщение информацию.Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - не нуль.
Если функция завершается ошибкой, величина возвращаемого значения нулевая. Чтобы получить дополнительные данные об ошибке, вызовите функцию GetLastError.
ЗамечанияСообщения в очереди сообщений извлекаются вызовами функции GetMessage или PeekMessage.
Прикладные программы, которым необходимо общаться друг с другом при помощи HWND_BROADCAST, должны использовать функцию RegisterWindowMessage, чтобы получить уникальное сообщение для связи между приложениями. Система совершает сортировку только системных сообщений (которые в диапазоне от 0 до WM_USER). Чтобы отправлять другие сообщения (которые значением выше WM_USER) другому процессу, Вы должны сделать специальную сортировку (маршалинг).Если Вы отправляете сообщение в диапазоне значений ниже WM_USER функциям асинхронных сообщений (PostMessage, SendNotifyMessage и SendMessageCallback), удостоверьтесь, что параметры сообщения не включают в себя указатели. Иначе операция завершиться ошибкой. Функции возвратят значения прежде, чем принимающий поток получит шанс обработать сообщение, а отправитель освободит память прежде, чем она будет использована.
Используя функцию PostMessage, не помещайте в очередь сообщение WM_QUIT; используйте для выхода из программы функцию PostQuitMessage.
Windows 2000/XP: Имеется ограничение в размере 10,000 помещенных в очередь (синхронных) сообщений в очередь сообщений. Это ограничение должно быть достаточно большим. Если ваше приложение выходит за пределы ограничения, оно должно быть переделано, чтобы избежать использования большого количества системных ресурсов. Чтобы регулировать это ограничение, измените нижеследующий ключ
системного реестра:
|
Минимальное приемлемое значение - 4000.
Windows 95/98/Me: PostMessageW поддерживается подпрограммой Microsoft Layer for Unicode (MSLU). Чтобы использовать подпрограмму, Вы должны добавить некоторые файлы к вашему приложению, как это определено в Microsoft Layer for Unicode для систем Windows 95/98/Me.
Пример
Пример смотри в статье Инициализация компоновщика данных.
Смотри также
Обзор Сообщения и очереди сообщений, GetMessage, PeekMessage, PostQuitMessage, PostThreadMessage, RegisterWindowMessage, SendMessageCallback, SendNotifyMessage
Размещение и совместимость PostMessage |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 3.1 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
User32.lib |
Заголовочный файл |
|
- объявлено в |
Winuser.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |