最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

MFC消息映射机制

来源:动视网 责编:小OO 时间:2025-10-04 18:28:16
文档

MFC消息映射机制

一MFC中采用的这种消息处理机制成为MFC消息映射机制一个MFC消息响应函数在程序中有三处相关信息:函数原型,函数实现,关联消息和消息响应函数的宏。函数原型——头文件CDrawView——两个AFX_MSG注释宏之间——消息响应函数原型的声明——afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);函数实现——源文件CDrawView()——OnLButtonDown(UINTnFlags,CPointpoint)关联消息和消息响应函数的宏——源文件
推荐度:
导读一MFC中采用的这种消息处理机制成为MFC消息映射机制一个MFC消息响应函数在程序中有三处相关信息:函数原型,函数实现,关联消息和消息响应函数的宏。函数原型——头文件CDrawView——两个AFX_MSG注释宏之间——消息响应函数原型的声明——afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);函数实现——源文件CDrawView()——OnLButtonDown(UINTnFlags,CPointpoint)关联消息和消息响应函数的宏——源文件
一MFC中采用的这种消息处理机制成为MFC消息映射机制

一个MFC消息响应函数在程序中有三处相关信息:

函数原型,

函数实现,

关联消息和消息响应函数的宏。

函数原型——头文件CDrawView——两个AFX_MSG注释宏之间——消息响应函数原型的声明——afx_msg void OnLButtonDown(UINT nFlags,CPoint point);

函数实现——源文件CDrawView()——OnLButtonDown(UINT nFlags,CPoint point)

关联消息和消息响应函数的宏——源文件CDrawView()——BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间

二MFC消息映射机制的具体实现方法是:

在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即:消息映射表。

在消息映射表中,消息与对应的消息处理函数指针是成对出现的。

某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可知道该类能否处理此消息。

如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。

三MFC消息映射机制的实际实现过程:

MFC在后台维护了一个窗口句柄与对应的C++对象指针的对照表。

以本例中的CDrawView类为例,与CDrawView对象相关的有一个窗口,窗口当然有它的窗口句柄。

窗口句柄与C++对象对照表中维护的对应关系是:窗口句柄与CDrawView对象的一个指针(CDrawView*)存在着一一对应的关系,

具体实现过程:当收到某一消息时,消息的第一个参数就指明该消息与哪个窗口句柄相关,通过

对照表就可以找到与之相关的C++对象指针。然后把这个指针传递给应用程序框架窗口类的基类,后者会调用一个

名为WindowProc的函数。WindowProc是一个虚函数,WindowProc函数内部调用了一个OnWndMsg函数,真正的消息路由,也就是

消息映射就是由此函数完成的。

四、OnWndMsg函数的处理过程是:

1、首先判断消息是否有消息响应函数。

判断的方法是:在相应窗口类中查找所需的消息响应函数。

因为传递给WindowProc函数的是窗口子类指针,所以OnWinMsg函数会到相应的子类头文件中查找----看看DECLARE_MESSAGE_MAP()

宏之上,两个AFX_MSG注释宏之间是否有相应的消息响应函数原型的声明;------再到子类的源文件中,看看

BEGIN_MESSAGE_MAP和END_MESSAGE_MAP这两个宏之间是否有相应的消息映射宏。

2、如果通过了上述步骤,找到了消息映射函数,那么接着就会调用该响应函数,对消息进行处理。

3、如果在子类中没有找到消息响应函数,那么就交由基类进行处理。

文档

MFC消息映射机制

一MFC中采用的这种消息处理机制成为MFC消息映射机制一个MFC消息响应函数在程序中有三处相关信息:函数原型,函数实现,关联消息和消息响应函数的宏。函数原型——头文件CDrawView——两个AFX_MSG注释宏之间——消息响应函数原型的声明——afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);函数实现——源文件CDrawView()——OnLButtonDown(UINTnFlags,CPointpoint)关联消息和消息响应函数的宏——源文件
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top