Кент Рейсдорф. 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: вы можете перетаскивать окно, нажав кнопку мыши в любой точке рабочей области.