一、映射机制原理
Windows程序是基于消息机制来编程的。
MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的,也就是他们是绑定在一起的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态对照表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可以知道该类能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。
之所以没有采用:在基类中针对每种消息做一个虚函数(虚函数必须由一个虚函数表vtable来实现),当子类对消息响应时候,只要在子类中重写这个虚函数即可,是因为MFC类派生层次很多,如果在基类对每个消息进行虚函数处理,那么从基类派生的每个子类都将背负一个庞大的虚函数表,这样浪费内存,故MFC没有采取这种方式而采取消息映射方式。
二、举例(vc视频中例子)
1)视类的头文件中
//
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg
2)在视类的源文件中
BEGIN_MESSAGE_MAP(CMFCTestView,
//
ON_COMMAND(ID_FILE_PRINT,
ON_COMMAND(ID_FILE_PRINT_DIRECT,
ON_COMMAND(ID_FILE_PRINT_PREVIEW,
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
#define
{
(AFX_PMSG)(AFX_PMSGW)
(static_cast<
3)还是在在视类的源文件中
{
//
}