Кент Рейсдорф. BORLAND C++BUILDER. Раздел 4

Кент Рейсдорф. BORLAND C++BUILDER. Страница 428

Реализация и перехват определяемого пользователем сообщения почти идентичны обработке сообщения Windows. Единственное отличие состоит в том, что вы должны сначала определить сообщение. Это делается следующим образом:

#define MYMESSAGE WM__USER + 1

Эта строка устанавливает определяемое пользователем сообщение с име­нем MYMESSAGE.

Вернитесь к листингу 14.5 и обратите внимание на объявление сообщения в строке 11. Как только вы определили сообщение, вы можете добавить его в таблицу отображения сообщений следующим образом:

MESSAGE_HANDLER(MYMESSAGE, TMessage, OnMyMessage) Заметьте, что раскрывающая структура сообщения имеет тип TMessage. Это структура общего вида, которая определена следующим образом:

Когда вы посылаете сообщение, определяемое пользователем, то передаете любые параметры, которые вам нужны, через члены WParam и LParam. Предположим, например, что вы послали сообщение, указывающее, что про­изошла ошибка с кодом 124 на 1019 итерации цикла обработки. Тогда вызов Perform() мог бы выглядеть следующим образом:

int result = MainForm->Perform(MYMESSAGE, 124, 1019);

Конечно, для посылки сообщения вы также могли бы использовать Post- MessageQ или SendMessage(). Для определяемых пользователем сообщений вы, возможно, будете использовать Perform() в большинстве случаев.

Итак, сообщение определено и послано. Теперь вы должны написать код для его обработки. Обработчик сообщения для MYMESSAGE мог бы выглядеть следующим образом:

Значение, возвращаемое Perform(), будет значением члена Result струк­туры TMessage. Будете ли вы посылать параметры, и будет ли ваш обработчик сообщения возвращать результат, полностью зависит от вас.

Компакт-диск, прилагаемый к книге, содержит программу с названием Message, которая иллюстрирует обработку сообщений Windows, не охваченных событиями VCL. Она также демонстрирует применение сообщения, определяемого пользователем. В этой программе реализованы некоторые трюки, использующиеся при программирования в Windows: вы може­те перетаскивать окно, нажав кнопку мыши в любой точке рабочей области.

Web-дизайн (с) 2010 All rights reserved