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


Message Maps (ATL)

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

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

Цепного сопоставления сообщения

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

Библиотеки 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 с идентификатором сопоставления сообщения.

См. также

Ссылки

Implementing a Window