龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

深度解析VC中的消息(下)(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
消息映射的内容 通过ClassWizard为我们生成的代码,我们可以看到,消息映射基本上分为2大部分: 在头文件(.h)中有一个宏DECLARE_MESSAGE_MAP(),他被放在了类的

    消息映射的内容

    通过ClassWizard为我们生成的代码,我们可以看到,消息映射基本上分为2大部分:

    在头文件(.h)中有一个宏DECLARE_MESSAGE_MAP(),他被放在了类的末尾,是一个public属性的;与之对应的是在实现部分(.cpp)增加了一章消息映射表,内容如下:

    BEGIN_MESSAGE_MAP(当前类, 当前类的基类)

       file://{{AFX_MSG_MAP(CMainFrame)
         消息的入口项
       file://}}AFX_MSG_MAP
   END_MESSAGE_MAP()

   但是仅是这两项还远不足以完成一条消息,要是一个消息工作,必须有以下3个部分去协作:

   1.在类的定义中加入相应的函数声明;

  2.在类的消息映射表中加入相应的消息映射入口项;

  3.在类的实现中加入相应的函数体;

   消息的添加

   有了上面的这些只是作为基础,我们接下来就做我们最熟悉、最常用的工作:添加消息。MFC消息的添加主要有2种方法:自动/手动,我们就以这2种方法为例,说一下如何添加消息。

   1、利用Class Wizard实现自动添加

   在菜单中选择View-->Class Wizard,也可以用单击鼠标右键,选择Class Wizard,同样可以激活Class Wizard。选择Message Map标签,从Class name组合框中选取我们想要添加消息的类。在Object IDs列表框中,选取类的名称。此时, Messages列表框显示该类的大多数(若不是全部的话)可重载成员函数和窗口消息。类重载显示在列表的上部,以实际虚构成员函数的大小写字母来表示。其他为窗口消息,以大写字母出现,描述了实际窗口所能响应的消息ID。选中我们向添加的消息,单击Add Function按钮,Class Wizard自动将该消息添加进来。

   有时候,我们想要添加的消息本应该出现在Message列表中,可是就是找不到,怎么办?不要着急,我们可以利用Class Wizard上Class Info标签以扩展消息列表。在该页中,找到Message Filter组合框,通过它可以改变首页中Messages列表框中的选项。这里,我们选择Window,从而显示所有的窗口消息,一把情况下,你想要添加的消息就可以在Message列表框中出现了,如果还没有,那就接着往下看:)

   2、手动地添加消息处理函数

   如果在Messages列表框中仍然看不到我们想要的消息,那么该消息可能是被系统忽略掉或者是你自己创建的,在这种情况下,就必须自己手工添加。根据我们前面所说的消息工作的3个部件,我们一一进行处理:

   1) 在类的. h文件中添加处理函数的声明,紧接在//}}AFX_MSG行之后加入声明,注意:一定要以afx_msg开头。

   通常,添加处理函数声明的最好的地方是源代码中Class Wizard维护的表下面,但是在它标记其领域的{{}}括弧外面。这些括弧中的任何东西都将会被Class Wizard销毁。

    2) 接着,在用户类的.cpp文件中找到//}}AFX_MSG_MAP行,紧接在它之后加入消息入口项。同样,也是放在{ {} }的外面

    3) 最后,在该文件中添加消息处理函数的实体。

精彩图集

赞助商链接