Программирование для IBM OS2


2.3. Передача сообщений функции окна


Общепринятый способ взаимодействия окон в системе Presentation Manager основан на передаче сообщений . Конкретнее, функция main или обработчик сообщения функции любого окна может послать сообщение другому окну. При этом передаваемое сообщение попадет в функцию этого окна.

Существует два принципиально разных способа передачи сообщений - передача через очередь приложения и непосредственная передача.

Передача сообщений через очередь приложения выполняется функцией WinPostMsg , прототип которой приведен ниже:

BOOL WinPostMsg ( HWND hwnd, // идентификатор окна ULONG ulMsgid, // код сообщения MPARAM mpParam1, // первый параметр MPARAM mpParam2); // второй параметр

Функция WinPostMsg посылает сообщение в функцию окна с идентификатором hwnd, причем код передаваемого сообщения определяется параметром ulMsgid, а первый и второй параметры сообщения - параметрами mpParam1 и mpParam2, соответственно.

Процедура посылки сообщения при помощи функции WinPostMsg выглядит следующим образом: функция записывает сообщение в очередь приложения и сразу же возвращает управление, не дожидаясь завершения обработки переданного сообщения. Если сообщение записано в очередь, функция WinPostMsg возвращает значение TRUE. В том случае, когда сообщение невозможно записать в очередь (например, по причине ее переполнения), функция возвращает значение FALSE.

Второй способ передачи сообщений основан на использовании функции WinSendMsg , прототип которой аналогичен прототипу функции WinPostMsg :

BOOL WinSendMsg ( HWND hwnd, // идентификатор окна ULONG ulMsgid, // код сообщения MPARAM mpParam1, // первый параметр MPARAM mpParam2); // второй параметр

Вызов функции WinSendMsg приводит к тому, что Presentation Manager выполняет непосредственный вызов функции окна, идентификатор которого задан параметром hwnd. При этом функции окна передается сообщение с кодом ulMsgid и параметрами mpParam1, mpParam2.

В отличие от функции WinPostMsg , функция WinSendMsg возвращает управление только после того, как передаваемое сообщение будет обработано соответствующей функцией окна.


Начало  Назад  Вперед