发布网友
发布时间:2024-10-06 15:18
共1个回答
热心网友
时间:2024-10-24 02:40
OnCmdMsg(
UINT nID,
int nCode,
void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo)
框架的命令消息传递机制主要依赖于OnCmdMsg的实现。命令目标对象是可能或希望处理消息的对象,它对应于一个特定的类。
默认情况下,CCmdTarget在类和基类的消息映射数组中查找与指定命令ID和控制通知代码相匹配的消息处理函数。标准Windows消息不会通过这个函数处理。GetMessageMap这个虚拟函数提供了消息映射入口数组_messageEntries,通过匹配消息ID和通知代码来定位处理函数。
如果没有找到匹配,会继续在基类的消息映射中搜索,直到遍历到CCmdTarget基类。如果仍无匹配,函数返回FALSE,表示无法处理该消息。
派生自CCmdTarget的类可以重写OnCmdMsg,决定是否处理特定命令。如果无法处理,可以通过调用基类的OnCmdMsg,将命令传递给下一个处理目标。例如,CWnd和CDocument等MFC类就可能覆盖这个函数,以实现MFC的标准命令消息传递路径。
应用程序也可以覆盖OnCmdMsg,以自定义命令发送规则。这可以在需要打断发送顺序、或者将命令发送给非默认对象的类中实现。
CCmdTarget类派生于CObject,封装了MFC的消息映射和IDispatch接口。对于希望接收系统事件和窗口消息的类,如文档类和窗口类,通常会从CCmdTarget派生。它还提供了BeginWaitCursor、EndWaitCursor和RestoreWaitCursor等函数,用于在处理耗时操作时显示等待光标,如加载和存储文档时。在处理前后调用BeginWaitCursor和EndWaitCursor,而如果在处理过程中弹出对话框,可能需要调用RestoreWaitCursor来重新设置光标为沙漏形状。
类CCmdTarget是MFC类库中消息映射体系的一个基类,是MFC处理命令消息的基础、核心。消息映射把命令或消息引导给用户为之编写的响应函数。