Функция PostMessage


Функция 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 помещенных в очередь (синхронных) сообщений в очередь сообщений. Это ограничение должно быть достаточно большим. Если ваше приложение выходит за пределы ограничения, оно должно быть переделано, чтобы избежать использования большого количества системных ресурсов. Чтобы регулировать это ограничение, измените нижеследующий ключ системного реестра:
HKEY_LOCAL_MACHINE 
                             SOFTWARE

                                         Microsoft

                                              Windows NT
                                                            CurrentVersion
                                                                           Windows
                                                                                  USER
                                                                                         PostMessageLimit

Минимальное приемлемое значение - 4000.

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

Пример

Пример смотри в статье  Инициализация компоновщика данных.

Смотри также

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

Размещение и совместимость 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

Нет

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

Не имеется

 

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

Hosted by uCoz