MFC将大部分的Windows消息及其处理函数封装进类,采用一套适合面向对象的机制--消息映射来处理消息;
消息映射实质上是一张消息及处理消息的函数相互关联的表,以及分析处理这张表的应用框架内部的一些程序代码;
MFC的框架结构中消息处理函数以类的成员函数的形式存在,每个特定的消息都有对应的消息处理函数。
消息映射包括了三部分:
1.在类的声明头文件.h中加上一行宏调用:
afx_msg int OnCreate();
DECLARE_MESSAGE_MAP() //声明消息处理函数
2.在类的实现文件中(.cpp)中加上消息映射表:
BEGIN_MESSAGE_MAP(类名,父类名)
ON_WM_CREATE() //消息映射入口项
END_MESSAGE_MAP
3.在类的实现文件(.cpp)最后加上消息处理函数的函数体:
void 类名::OnCreate() {...}
MFC应用程序对消息的处理大致分为两个阶段。
第一个阶段,使用应用程序类的Run()函数把消息从应用程序的消息队列提取出来,并且发送到目标类对象,即主框架窗口类对象;
第二个阶段,因为所有消息的最终目标并不一定是主窗口类对象,也可能是其他类,所以主窗口类对象在MFC消息映射处理机制的协助下继续寻找消息处理函数。
Visual Studio添加消息映射方式:
1.自动添加。 a.首先找到类视图和属性窗口,(类视图,非解决方案视图)
b.在类视图中选中需要在哪个类中添加消息映射,属性窗口会出现相对应的属性,在属性窗口中选择消息按钮,找到你想添加的消息,例如LBUTTONDOWN,下拉添加,
c.添加完成后,会在头文件.h中显示该消息处理函数的声明、执行文件.cpp的消息映射表中看到消息入口、在.cpp最底下看到消息处理函数代码。
2.手动添加。 a.在头文件中,添加消息映射的声明;例如 afx_msg int OnLButtonDown();
b.在cpp文件消息映射表处,添加消息映射,例如添加ON_WM_CREATE();
c.在cpp文件中,添加消息处理函数的函数体,实现消息需要执行的流程。
VS开发MFC程序时字符集默认是使用Unicode字符集(Unicode字符集是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求)
如果发现使用MessageBox函数弹出对话框的时候有关汉字部分报错:无法将参数“const char[12]”转换为“LPCTSTR”,只需要将原先默认使用的Unicode字符集换成“使用多字节字符集”