AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

谈谈MFC中的消息映射

51自学网 2015-08-30 http://www.wanshiok.com

  方法:

  不同种类消息的映射方法。

  在以上三种消息中,标准的WINDOWS消息映射是相当简单的。可直接通过类向导完成不同消息的映射处理,所以不在本文讨论之列。

  凡是从CcmdTarget类派生的类都可以有消息映射.消息映射包括如下两方面的内容:

  在类的定义文件中(.H)中加上一条宏调用:

  DECLARE_MESSAGE_MAP()

  通常这条语句中类定义的最后.

  在类的实现文件(.CPP)中加上消息映射表:

  BEGIN_MESSAGE_MAP(类名,父类名)

    ………..

   消息映射入口项.

   ……….

   END_MESSAGE_MAP( )

  幸运的是除了某些类(如没有基类的类或直接从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值一般较小.

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:用VC++实现矢量地图背景下的实时显示  下一篇:在Visual C++中如何建立多模板文档