Категории сообщений
Какие типы сообщений выполняются при написании обработчиков для трех основных категорий:
сообщения Windows
Это включает в себя в первую очередь эти сообщения, начиная с префикса WM_, за исключением WM_COMMAND . Сообщения Windows обрабатываются окнами и представлениями. Эти сообщения часто имеют параметры, используемые при определении способа обработки сообщения.
Уведомления об управлении
К ним относятся WM_COMMAND сообщения уведомлений из элементов управления и других дочерних окон в родительские окна. Например, элемент управления редактирования отправляет родительское сообщение WM_COMMAND, содержащее код уведомления EN_CHANGE, когда пользователь принял действие, которое могло изменить текст в элементе управления редактированием. Обработчик окна для сообщения отвечает на сообщение уведомления соответствующим образом, например получение текста в элементе управления.
Платформа направляет сообщения управления уведомлениями, как и другие WM_ сообщения. Однако одним из исключений является сообщение BN_CLICKED уведомления об элементе управления, отправляемом кнопками, когда пользователь щелкает их. Это сообщение обрабатывается специально как командное сообщение и направляется так же, как и другие команды.
Командные сообщения
К ним относятся WM_COMMAND сообщения уведомлений из объектов пользовательского интерфейса: меню, кнопки панели инструментов и клавиши акселератора. Платформа обрабатывает команды по-разному от других сообщений, и их можно обрабатывать другими типами объектов, как описано в разделе "Целевые объекты команд".
Сообщения Windows и сообщения с уведомлениями об элементах управления
Сообщения в категориях 1 и 2 — сообщения Windows и уведомления управления обрабатываются окнами: объекты классов, производных от класса CWnd
. К ним относятся CFrameWnd
, , CMDIFrameWnd
, CMDIChildWnd
CView
CDialog
и собственные классы, производные от этих базовых классов. Такие объекты инкапсулируют HWND
дескриптор окна Windows.
Командные сообщения
Сообщения в категории 3 — команды — могут обрабатываться более широким спектром объектов: документов, шаблонов документов и самого объекта приложения в дополнение к окнам и представлениям. Если команда напрямую влияет на какой-то конкретный объект, то имеет смысл иметь этот объект для обработки команды. Например, команда Open в меню "Файл" логически связана с приложением: приложение открывает указанный документ после получения команды. Поэтому обработчик команды Open является функцией-членом класса приложения. Дополнительные сведения о командах и их маршрутизации в объекты см. в разделе "Как платформа вызывает обработчик".