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

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
完成上述工作之后我们还需要在该类的头文件(亦即.H)中加入消息处理函数的申明: // Generated message-map functions protected: file://{{AFX_MSG(CMyApp) ... file://}}AFX_MSG

  完成上述工作之后我们还需要在该类的头文件(亦即.H)中加入消息处理函数的申明:

  // Generated message-map functions

  protected:

  file://{{AFX_MSG(CMyApp)

  ...

  file://}}AFX_MSG

  afx_msg void OnDoSomething( UINT nID );

  DECLARE_MESSAGE_MAP()

  由于这不是VC类向导加入的函数申明,所以放在了//}}AFX_MSG之外.

  注意这个消息处理函数有一个UINT类型参数.而处理单一命令的消息处理函数一般是没有参数(除更新用户接口对象状态命令消息处理函数).这个参数的主要作用是提供用户选择的命令的ID值.

  最后要做的工作就是在该类的实现文件中实现该消息处理函数. 同样,有时我们也想使用一个消息处理函数处理一批更新用户接口对象状态命令消息.方法同上:

  首先在.CPP文件中加入语句如下:

   ...

   BEGIN_MESSAGE_MAP(CMyApp, CWinApp)

    file://{{AFX_MSG_MAP(CMyApp)

     ...

    file://}}AFX_MSG_MAP

    ON_UPDATE_COMMAND_UI_RANGE (ID_MYCMD_ONE, ID_MYCMD_TEN, OnUpdateSomething)

   END_MESSAGE_MAP( )

    ...

  在该类的头文件(亦即.H)中加入消息处理函数的申明:

   // Generated message-map functions

   protected:

   file://{{AFX_MSG(CMyApp)

   ...

   file://}}AFX_MSG

   afx_msg void OnUpdateSomething( CcmdUI * pcmdui );

   DECLARE_MESSAGE_MAP()

请各位注意了,仔细的读者已经注意到这里的消息处理函数并未像命令消息处理函数需要一个额外的UINT类型的参数.原因在于pcmdui中已包含了此信息.所以不再需要这个参数了.最后不要忘了完成函数体!

  关于命令消息就讨论到这个地方.接下来讨论控件通知消息.

精彩图集

赞助商链接