Поделиться через


Схемы сообщений (ATL)

Карта сообщений связывает функцию обработчика с определенным сообщением, командой или уведомлением. С помощью макросов карты сообщений ATL можно указать карту сообщений для окна. Процедуры окна в CWindowImpl, CDialogImplа CContainedWindowT также перенаправление сообщений окна на карту сообщений.

Функции обработчика сообщений принимают дополнительный аргумент типаBOOL&. Этот аргумент указывает, был ли обработано сообщение и по умолчанию задано значение TRUE. Затем функция обработчика может задать аргумент false, чтобы указать, что он не обрабатывал сообщение. В этом случае ATL будет продолжать искать функцию обработчика далее в карте сообщений. Задав этот аргумент значение FALSE, сначала можно выполнить некоторые действия в ответ на сообщение, а затем разрешить обработку по умолчанию или другую функцию обработчика завершить обработку сообщения.

Карты цепочки сообщений

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

ATL также поддерживает динамическую цепочку, которая позволяет связываться с картой сообщений другого объекта во время выполнения. Чтобы реализовать динамическую цепочку, необходимо наследовать класс из CDynamicChain. Затем объявите макрос CHAIN_MSG_MAP_DYNAMIC в карте сообщений. CHAIN_MSG_MAP_DYNAMIC требуется уникальное число, определяющее объект и карту сообщений, к которой выполняется цепочка. Это уникальное значение необходимо определить с помощью вызова CDynamicChain::SetChainEntry.

Вы можете привязывать к любому классу, объявляющем карту сообщений, если класс является производным от CMessageMap. CMessageMap позволяет объекту предоставлять карты сообщений другим объектам. Обратите внимание, что CWindowImpl уже является производным от CMessageMap.

Альтернативные Карты сообщений

Наконец, ATL поддерживает альтернативные карты сообщений, объявленные с помощью макроса ALT_MSG_MAP . Каждая альтернативная карта сообщений определяется уникальным номером, который передается в ALT_MSG_MAP. С помощью альтернативных карт сообщений можно обрабатывать сообщения нескольких окон на одной карте. Обратите внимание, CWindowImpl что по умолчанию не используется альтернативные карты сообщений. Чтобы добавить эту поддержку, переопределите WindowProc метод в CWindowImplпроизводном классе и вызовите ProcessWindowMessage идентификатор карты сообщений.

См. также

Реализация окна