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

// модуль U2Messl.cpp

void _fastcall TForm2 : •.OnActivate (TWMActivateS a)
(

if (a.Active == WA_INACTIVE)
Label2->Caption = "Меня покинули!";

else Label2->Caption = "Ура! Я работаю!";

a.Result = 0;

Обработчик OnActivate строится по тем же принципам, что и предыдущий. В
нем анализируется значение поля Active структуры а, передаваемой в процедуру в
качестве параметра и содержащей параметры сообщения. В зависимости от значе-
ния этого параметра производятся те или иные действия.

Откомпилируйте оба ваших приложения и выполните приложение PMessl.
Вы увидите (рис. 6.1), как при каждом переключении фокуса между окнами в них
появляются сообщения, отражающие потерю и обретение ими активности.

Рис. 6.1

Приложения,

обменивающиеся

сообщениями

Подобное приложение, дополненное еще несколькими обработчиками собы-
тий, вы можете увидеть на диске, приложенном к книге. В него, в частности,
включены использовавшиеся в разделе 4.2.4 главы 4 обработчики сообщений
WM_GETMINMAXINFO, генерируемых при изменении размеров окна. Введен-
ные обработчики имеют вид

void   fastcall TFormI::OnGetMinMaxInfo(TWMGetMinMaxInfoS a)

a.MinMaxInfo->ptMinTrackSize.x = 180;

a.MinMaxInfo->ptMaxTrackSize.x = 300;

a.MinMaxInfo->ptMinTrackSize.y = 150;

a.MinMax!nfo->ptMaxTrackSize.y = 300;

a.MinMaxInfo->ptMaxPosition.x = BoundsRect.Left;

a.MinMax!nfo->ptMaxPosition.y = BoundsRect.Top;

Этот обработчик ограничивает возможности пользователя по изменению раз-
меров окон пределами 150х300 пикселей в высоту и 180х300 пикселей в ширину, а
также задает координаты левого верхнего угла распахнутого окна равными теку-
щим координатам левого верхнего угла окна.

6.3.4 Определение собственных сообщений

В предыдущих разделах посылались и обрабатывались сообщения, предопре-
деленные API Windows. Однако, вы можете описать свои собственные сообщения и
работать с ними так же, как с предопределенными.

Номера своих собственных сообщений вы должна отсчитывать от константы
WM_USER, которая соответствует первому номеру сообщения пользователя.