Взаимодействие приложения с внешними программами______________389

bool PostMessage(HWND hWnd, unsigned int Msg, WPARAM wParam,
LPARAM IParam) ;

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

Параметр Msg определяет передаваемое сообщение. Параметры wParam и 1Ра-
ram могут содержать дополнительную информацию. Функция возвращает ненуле-
вое значение при успешном завершении и нуль в случае аварийного завершения. В
этом случае причину ошибки можно установить вызовом функции GetLastError.

Имеется еще один метод, который может посылать сообщение непосредствен-
но оконному компоненту. Это метод Perform, объявление которого имеет вид:

Perform(unsigned int Msg, WPARAM wParam, LPARAM IParam);

Есть еще ряд функций, позволяющих передавать сообщения, но мы на них не
будем останавливаться, так как они реже используются в приложениях C-H-Buil-
der.

6.3.2.3 Пример посылки сообщений

Давайте построим простую программу, демонстрирующую посылку сообще-
ний. Начните новый проект, создайте в нем две формы Formi и Form2, сохраните
проект, назвав модули форм UlMessI и U2Messl соответственно, а файл проек-
та — PMessl. Форма Formi будет у нас главной и она будет управлять видимостью
формы Form2. Поэтому в ее модуль введите директиву препроцессора

ftinclude "U2Messl.h"

а свойство Visible формы Form2 должно быть равно false.

Перенесите на форму Formi две кнопки, дав им надписи Show Form2 и Close
Form2. В обработчике щелчка первой кнопки напишите оператор

Form2->Show();

а в обработчике щелчка второй кнопки — оператор

SendMessage(Form2->Handle,WM_CLOSE,0,0) ;

Этот оператор посылает сообщение WM_CLOSE (второй параметр функции
SendMessage) форме Form2. Первый параметр функции SendMessage содержит
дескриптор окна этой формы, полученный с помощью ее свойства Handle. Сообще-
ние WM_CLOSE не имеет параметров; поэтому параметры wParam и IParam зада-
ны равными нулю.

Приведенный выше оператор можно заменить на следующий:

Form2->Perforro(WM_CLOSE,0,0) ;

Результат будет тем же самым.

Сохраните и запустите приложение. Вы увидите, что нажатие пользователем
кнопки Show Form2 приводит к появлению на экране формы Form2, а нажатие
кнопки Close Form2 — к ее закрытию. Так что посылаемое формой Formi сообще-
ние достигает своего адресата.

Конечно, этот пример не очень интересный, поскольку сделать невидимой
форму Form2 мы могли бы и не посылая никаких сообщений Windows, а просто
используя метод Hide. Поэтому пойдем дальше. Откройте новый проект, задайте
заголовок Caption ее формы равным «Приложение Pmess2« (этот текст мы будем да-
лее использовать для идентификации окна этого приложения) и сохраните проект
под именем PMess2, а модуль формы — под именем UlMess2. Кстати, поскольку у
нас будет два проекта, можете включить их в общую группу, чтобы опробовать