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

谈谈MFC中的消息映射(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
幸运的是除了某些类(如没有基类的类或直接从CobjectO类派生的类)外.其它许多类均可由类向导生成.尽管生成的类只是一个框架,需要我们补充内容.但消息映

  幸运的是除了某些类(如没有基类的类或直接从CobjectO类派生的类)外.其它许多类均可由类向导生成.尽管生成的类只是一个框架,需要我们补充内容.但消息映射表已经为我们加好了.只是入口项有待我们加入.

  命令消息映射入口项是一个ON_COMMAND的宏.比如文件菜单下的"打开…"菜单(ID值为ID_FILE_OPEN)对应的消息映射入口项为:

  ON_COMMAND(ID_FILE_NEW,OnFileOpen)

  加入消息映射入口项之后需要完成消息处理函数.在类中消息处理函数都是类的成员函数,要响应一个消息,就必须定义一个该消息的处理函数.定义一个消息处理函数包括以下三方面的内容.

  1.在类定义中加入消息处理函数的函数原型(函数声明)

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

  3.在类的实现中加入消息处理函数的函数体.

  需要说明的是消息处理函数的原型一定要以afx_msg打头.比如:

    afx_msg OnFileOpen();// 函数原型

    作为约定.消息处理函数一般以On打头

  但有时我们可能想用一个消息处理函数来处理一批消息。这时类向导就无能为力了。我们必须手工加入消息映射来完成这种工作。可用如下方法实现:

  首先在处理该消息所在类的实现文件(亦即.CPP)中加入的消息映射入口:

   ...

  BEGIN_MESSAGE_MAP(CMyApp, CWinApp)

   file://{{AFX_MSG_MAP(CMyApp)

   ...

   file://}}AFX_MSG_MAP

   ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, OnDoSomething)

  END_MESSAGE_MAP( )

  ...

粗体标志的语句是我们加入的语句(以后约定我们加入的语句均用粗体标志).其中我们使用了宏ON_COMMAND_RANGE来实现从命令消息ID_MYCMD_ONE到 ID_MYCMD_TEN都由OnDoSomthing一个消息函数处理.注意.ID_MYCMD_ONE到 ID_MYCMD_TEN的ID值一定要连续.且ID_MYCMD_ONE值一般较小.

精彩图集

赞助商链接