面试题答案
一键面试- 声明消息映射入口:
- 在类的头文件(.h)中,使用
DECLARE_MESSAGE_MAP()
宏。例如,对于一个从CMyWnd
类(假设从CWnd
派生),在CMyWnd.h
中:
class CMyWnd : public CWnd { public: // 其他成员函数和变量声明 DECLARE_MESSAGE_MAP() };
- 在类的头文件(.h)中,使用
- 定义消息映射:
- 在类的源文件(.cpp)中,使用
BEGIN_MESSAGE_MAP
和END_MESSAGE_MAP
宏。例如,在CMyWnd.cpp
中:
BEGIN_MESSAGE_MAP(CMyWnd, CWnd) // 消息映射条目,例如处理 WM_PAINT 消息 ON_WM_PAINT() END_MESSAGE_MAP()
- 在类的源文件(.cpp)中,使用
- 处理函数的定义要求:
- 消息处理函数必须是类的成员函数,通常声明为
protected
或public
。 - 函数的参数和返回值取决于具体的消息。例如,处理
WM_PAINT
消息的函数定义如下:
void CMyWnd::OnPaint() { CPaintDC dc(this); // 用于绘制的设备上下文 // 具体的绘制代码 }
- 消息处理函数的命名通常遵循一定的规则,一般以
On
开头加上消息名去掉WM_
前缀,如OnLButtonDown
处理WM_LBUTTONDOWN
消息。
- 消息处理函数必须是类的成员函数,通常声明为