функции С и C++, библиотек C++Builder, API Windows_______________885

14.15 Сообщения Windows

Методика работы с сообщениями Windows подробно рассмотрена в главе 6 в
разделе 6.3. В данном разделе приводятся некоторые дополнительные справочные
сведения о функциях API Windows, упоминаемых в этой книге при рассмотрении
работы с сообщениями, и список некоторых часто используемых сообщений Win-
dows.

14.15.1 Некоторые функции, константы и типы API Windows,
используемые при работе с сообщениями

14.15.1.1 PostMessage — функция

Функция помещает указанное в ней сообщение окну или множеству окон в
очередь сообщений потока, создавшего эти окна, и возвращается, не дожидаясь
окончания обработки этого сообщения

Объявление

BOOL PostMessage(

HWND hWnd,     // дескриптор окна, которому передается сообщение
HINT Msg,      // сообщение
WPARAM wParam, // первый параметр сообщения
LPARAM IParam // второй параметр сообщения

Параметры

Параметр hWnd — дескриптор окна, которому передается сообщение. Если
этот параметр равен HWND_BROADCAST, то сообщение передается всем окнам
верхнего уровня в системе, включая недоступные, невидимые, перекрытые други-
ми и всплывающие, за исключением дочерних окон. Если этот параметр NULL, то
сообщение ставится в очередь сообщений (если она есть) текущего процесса.

Параметр Msg определяет передаваемое сообщение. Параметры wParam и 1Ра-
ram могут содержать дополнительную информацию.

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

Функция возвращает ненулевое значение при успешном завершении и нуль
при аварийном завершении. В этом случае причину ошибки можно установить вы-
зовом функции GetLastError.

Описание

Функция PostMessage ставит указанное в ней сообщение окну или множеству
окон в очередь сообщений потока, создавшего эти окна, и возвращается, не дожи-
даясь окончания обработки этого сообщения. Этим функция PostMessage отлича-
ется от функции SendMessage, которая ждет окончания обработки сообщения и на
это время блокирует приложение, пославшее сообщение. Сообщения в дальней-
шем изымаются из очереди функциями GetMessage и PeekMessage.

Если вы посылаете сообщение в диапазоне ниже WM_USER асинхронными
функциями PostMessage, SendNotifyMessage или SendMessageCallback, надо
быть уверенным, что параметры сообщения не включают указателей. В противном
случае из-за немедленного возврата функции может оказаться, что к моменту, ког-
да поток начнет обрабатывать сообщение, приложение, которое его послало, ока-
жется уже удаленным из памяти.