在Win32
API为了处理消息使用到了 switch, 但是很麻烦, MFC对其进行了封装, 也是通过定义宏的方式, 使用DECLARE_MESSAGE_MAP宏, 在.cpp文件中使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏包围起来, 里面写ON_xxx宏
原理
- DECLARE_MESSAGE_MAP定义了MessageMap变量, 该变量用于保存当前类要处理哪些消息, 就是Win32 API中switch中的case, 还有一个 entry指针, 用于指向父类的MessageMap, 起到了传递窗口的作用, 否则MFC在实现消息的窗口传递的时候消息就断了
- BEGIN_MESSAGE_MAP和END_MESSAGE_MAP合在一起就是一个结构体数组的初始化, END_MESSAGE_MAP中就包含有结构体数组初始化表达式的}括号
- ON_xxx系列宏就是为结构体数据中的结构体初始化表达式, 里面还会指定回调函数(比如OnLButtonDown, 此函数是当前类的静态成员函数, 需要用户自己定义)