谈谈MFC中的消息映射(3)
完成上述工作之后我们还需要在该类的头文件(亦即.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中已包含了此信息.所以不再需要这个参数了.最后不要忘了完成函数体!
关于命令消息就讨论到这个地方.接下来讨论控件通知消息.