Сообщение | Макрокоманда | Метод обработчик |
---|---|---|
WM_CHAR | ON_WM_CHAR() | afx_msg void OnChar(UINT, UINT, UINT); |
WM_CREATE | ON_WM_CREATE() | afx_msg int OnCreate(LPCREATESTRUCT); |
WM_HSCROLL | ON_WM_HSCROLL() | afx_msg void OnHScroll(UINT, UINT, CWnd*); |
WM_KEYDOWN | ON_WM_KEYDOWN() | afx_msg void OnKeyDown(UINT, UINT, UINT); |
WM_KEYUP | ON_WM_KEYUP() | afx_msg void OnKeyUp(UINT, UINT, UINT); |
WM_LBUTTONDOWN | ON_WM_LBUTTONDOWN() | afx_msg void OnLButtonDown(UINT, CPoint); |
WM_LBUTTONUP | ON_WM_LBUTTONUP() | afx_msg void OnLButtonUp(UINT, CPoint); |
WM_PAINT | ON_WM_PAINT() | afx_msg void OnPaint(); |
WM_SIZE | ON_WM_SIZE() | afx_msg void OnSize(UINT, int, int); |
WM_TIMER | ON_WM_TIMER() | afx_msg void OnTimer(UINT); |
WM_VSCROLL | ON_WM_VSCROLL() | afx_msg void OnVScroll(UINT, UINT, CWnd*); |
Все методы-обработчики определены с ключевым словом afx_msg. Оно позволяет отличить эти методы от остальных методов класса. На этапе препроцессорной обработки ключевое слово afx_msg удаляется. Определение afx_msg вы можете найти в файле afxwin.h:
#define afx_msg
Макрокоманды ON_WM_
Когда вы определяете обработчик стандартного сообщения Windows в своем классе, он будет использоваться вместо обработчика определенного в классе CWnd (или другом базовом классе). В любом случае вы можете вызвать метод обработчик базового класса из своего метода обработчика.
Макрокоманда ON_REGISTERED_MESSAGE обслуживает сообщения операционной системы Windows, зарегистрированные с помощью функции RegisterWindowMessage. Параметр nMessageVariable указывает идентификатор сообщения, для которого будет вызываться метод memberFxn.
ON_REGISTERED_MESSAGE(nMessageVariable, memberFxn)
Макрокоманда ON_MESSAGE обрабатывает сообщения, определенные пользователем. Идентификатор сообщения (его имя) указывается параметром message. Метод, который вызывается для обработки сообщения, указывается параметром memberFxn.
ON_MESSAGE(message, memberFxn)
Макрокоманды ON_COMMAND предназначены для обработки командных сообщений. Командные сообщения поступают от меню, кнопок панели управления и клавиш акселераторов. Характерной особенностью командных сообщений является то, что с ними связан идентификатор сообщения.
Макрокоманда ON_COMMAND имеет два параметра. Первый параметр соответствует идентификатору командного сообщения, а второй имени метода, предназначенного для обработки этого сообщения. Таблица сообщений должна содержать не больше одной макрокоманды для командного сообщения.
ON_COMMAND(id, memberFxn)
В общем случае командные сообщения не имеют обработчиков, используемых по умолчанию. Существует только небольшая группа стандартных командных сообщений, имеющих методы обработчики, вызываемые по умолчанию. Эти сообщения соответствуют стандартным строкам меню приложения. Так, например, если вы (или MFC AppWizard) присвоите строке Open меню File идентификатор ID_FILE_OPEN, то для его обработки будет вызван метод OnFileOpen, определенный в классе CWinApp. Список стандартных командных сообщений и их описание представлены в главах “Однооконный интерфейс” и “Многооконный интерфейс”.
Принято, что методы обработчики командных сообщений (как и методы обработчики всех других сообщений) должны быть определены с ключевым словом afx_msg.
Макрокоманда ON_COMMAND ставит в соответствие одному командному сообщению один метод-обработчик. В некоторых случаях более удобно, когда один и тот же метод-обработчик применяется для обработки сразу нескольких командных сообщений с различными идентификаторами. Для этого предназначена макрокоманда ON_COMMAND_RANGE .
Она назначает один метод memberFxn для обработки ряда командных сообщений, идентификаторы которых лежат в интервале от id1 до id2.
ON_COMMAND_RANGE(id1, id2, memberFxn)