Обе части необходимы для добавления обработчика сообщений в класс. Карта сообщений должна быть объявлена внутри вашего класса вместе с объявлениями для любых функций-обработчиков сообщений (например, OnSize
).
class CClassWnd : public CBaseClassWnd {
...
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP
};
afx_msg
- это просто пустой макрос-заполнитель - на самом деле он ничего не делает, но всегда включен в соглашение.
Карта сообщений затем определяется в файле .cpp класса:
BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
ON_WM_SIZE()
END_MESSAGE_MAP()
Эти макросы генерируют таблицу поиска для класса, которая позволяет отправлять сообщения, полученные окном, соответствующим функциям-обработчикам. Макрос ON_WM_SIZE
позволяет декодировать параметры сообщения wParam
и lParam
в сообщении WM_SIZE
в более значимые значения для функции обработчика сообщений (в данном случае nType
, cx
и cy
). MFC предоставляет макросы для большинства оконных сообщений (WM_LBUTTONDOWN
, WM_DESTROY
и т. Д.).
Более подробную информацию о том, как карты сообщений работают в MFC , можно найти здесь в MSDN.