分享

MFC消息响应机制

 看风景D人 2014-05-06
MFC消息映射机制具体实现:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息和对应的处理消息函数指针是成对出现的。某个类能处理的所有消息及其相应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序搜索该消息静态表,查看表中是否含有该消息,就知道此类能否处理该消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。
    MFC消息映射机制实际实现:MFC在后台维护了一个窗口句柄和对应C++对象指针的对照表。每个窗口类的对象相关一个窗口,窗口
又自己的窗口句柄,该句柄与窗口类的对象的一个指针存在一一对应关系,该窗口句柄与C++对象对照表就维护了这种对应关系。当收到某一消息时,消息的第一个参数就指明该消息和哪个窗口句柄相关,通过对照表,就可以找到与之相关的C++对象指针。然后把这个
指针传递给app框架类窗口类的基类,后者会调用一个名为WindowProc的函数。
    CWnd::WindowProc()->CWnd::OnWndMsg() //框架类最先接到消息
    OnWndMsg()函数的处理过程:
    首先判断消息是否有消息响应函数。判断方法:在相应窗口类中查找所需的消息相应函数。因为传递给WindowProc()函数的是窗
口类子类的指针,因此OnWndMsg函数就会到相应的子类头文件中去找,看看DECLARE_MESSAGE_MAP宏之上,两个AFX_MSG注释宏之间是
是否有相应的消息响应函数声明;再到子类源文件中,看看BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏之间是否有相应的消息映射宏。
    如果找到消息响应函数,那么就调用该消息响应函数,对消息进行处理;如果在子类中没有找到消息响应函数,就交由基类进行
处理。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多