На этом шаге мы рассмотрим классификацию сообщений в MFC и введем понятие "карты сообщений".
Основная задача разработчика программ для Windows - связь сообщений с обрабатывающими их функциями. В приложении, не использующем MFC, для этого нужна оконная процедура для каждого зарегистрированного оконного класса. Такая процедура обычно реализуется с помощью оператора switch, получающего идентификатор сообщения. В MFC-приложении сообщения обрабатывают функции-члены классов приложения, созданныx как Вами, так и мастером AppWizard. Чтобы связать сообщение с обработчиком, достаточно карты сообщений.
Карта сообщений - это таблица, объявленная в теле класса, которая связывает системные сообщения с функциями-членами данного класса. Она состоит из записей, назначающих функцию-обработчик для каждого идентификатора сообщения. Карта поддерживает 4 типа сообщений:
Тип сообщения | Описание |
---|---|
Сообщения Windows | Эти сообщения посылаются операционной системой. Они информируют приложение о создании окна, о его предстоящем уничтожении, о событиях клавиатуры и мыши, об изменениях системных цветов и обо всем остальном, что способно повлиять на выполнение программы. Идентификаторы этих сообщений обычно начинаются с префикса WM_. Сообщения Windows как правило обрабатываются окном, которому они посланы. Им может быть и главное окно приложения, и диалоговое окно |
Командные сообщения | Командные сообщения генерируются в ответ на действия пользователя, например на выбор пункта меню, щелчок кнопки панели инструментов или нажатие "быстрой" клавиши. Когда происходит одно из таких событий, приложению отправляется сообщение WM_COM MAND с параметром, зависящим от команды. Данные сообщения передаются каркасом объекту приложения. Такая маршрутизация команд позволяет приложению обработать сообщение в наиболее подходящем для этого классе |
Командные сообщения обновления пользовательского интерфейса | Данные сообщения генерируются каркасом приложения, таким образом, они присущи только MFC. Они сигнализируют приложению об изменении состояния элементов интерфейса, таких, как пункты меню и кнопки панелей инструментов. Например, перед отображением меню приложению отправляется соответствующее сообщение, что дает ему возможность изменить состояние этого меню - сделать его доступным, недоступным или помеченным |
Уведомления от элементов управления | Такие сообщения посылают родительскому окну элементы управления и другие дочерние окна. Они обычно представляют собой сообщения WM_COMMAND с параметрами уведомления. Например, поле ввода генерирует для своего родительского окна сообщение WM_COMMAND, содержащее код уведомления EN_CHANGE, когда пользователь предпринимает действия, которые могут изменить текст в этом поле |
Назначение карты сообщений аналогично таблице откликов, реализованной в библиотеке OWL.
На следующем шаге мы рассмотрим создание карты ссобщений.