392______________________________________________Глава 6

ботчик OnClose и тип передаваемого в него параметра — TWMClose. В разделе pri-
vate объявлена функция этого обработчика. В нее передается параметр, названный
message — структура сообщения.

В обработчике OnClose сообщения WM_CLOSE с параметром, которому дано
имя а, производится запрос подтверждения пользователя о закрытии окна. Для за-
проса использована процедура MessageDIgPos, позволяющая указать позицию
окна запроса вблизи окна формы, к которой относится запрос. При положитель-
ном ответе пользователя окно закрывается методом Close. В заключение операто-
ром a.Result = 0 возвращается нуль, так как это действие оговорено в приведенном
ранее описании сообщения WM_CLOSE.

Откомпилируйте оба ваших приложения и выполните приложение PMessl.
После того, как вы сделаете кнопкой Show Form2 видимой форму Form2 и запусти-
те кнопкой Exec Pmess2 приложение PMess2, вы увидите, что окна формы Form2 и
PMess2 оказывают сопротивление попыткам их зарыть, независимо от того, как
это делается: кнопками Close Form2 и Close Pmess2, или кнопками в полосах заго-
ловков этих окон. В любом случае они закрываются только после подтверждения
пользователя.

Кстйти, вы можете наглядно посмотреть и очередь сообщений. Щелкните на
кнопке Close Pmess2 и, пока на экране отображено окно запроса, вернитесь, ничего
не отвечая, в окно формы Formi первого приложения и щелкните еще несколько
раз на кнопке Close Pmess2. После этого ответьте на запрос отрицательно. Вы уви-
дите, что окно запроса без всяких дополнительных действий с вашей стороны бу-
дет отображаться еще столько раз, сколько раз вы щелкнули перед этим на Close
Pmess2. Все сообщения, связанные с этими щелчками, запомнились в очереди и те-
перь очередь разгружается.

Приведенный пример обработки сообщений не очень показательный, посколь-
ку сообщение WM_CLOSE не имеет параметров. Давайте усовершенствуем наши
приложения так, чтобы поработать с сообщениями, имеющими параметры. Воспо-
льзуемся для этого описанным ранее (раздел 6.3.1) сообщением WM_ACTIVATE.
Это сообщение получает любое окно при его активации или деактивации. Сообще-
ние имеет, в частности, параметр fActive. Значение WA_INACTIVE этого пара-
метра показывает, что окно деактивируется. Иные значения параметра показыва-
ют, что окно активируется.

Давайте введем во все наши формы (Formi и Form2 приложения PMessl, и
Formi приложения PMess2) обработчики сообщения WM_ACTIVATE. Чтобы ви-
деть, что эти обработчики работают правильно, поместим на эти формы дополните-
льно метки Label2, в которых будем отображать результаты обработки. И во все
три формы введем обработчики вида (приводится текст для формы Form2):

// модуль U2Messl.h
class TForm2 : public TForm
(

_published:     // IDE-managed Components
TLabel *Labell;

TLabel *Label2;

private:         // User declarations

void   fastcall OnClose(TWMCloses Message);

void   fastcall OnActivate(TWMActivateS Message);

public:          // User declarations
_fastcail TForm2(TComponent* Owner) ;

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER(WM_CLOSE, TWMClose, OnClose)
MESSAGE_HANDLER(MM_ACTIVATE, TWMActivate, OnActivate)
END_MESSAGE_MAP(TComponent)
};

//———————————————————————