在 MFC(Microsoft Foundation Classes)的 CMDIFrameWndEx 类中,OnCmdMsg 不是直接属于该类的公共方法。实际上,OnCmdMsg 是 CWnd 类中的一个虚拟函数,被用于处理 Windows 消息和命令消息。

以下是 OnCmdMsg 的一般形式:
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);

参数说明:
  •  nID:标识命令的 ID。

  •  nCode:命令的代码,例如 CN_COMMAND 表示普通的命令消息,CN_UPDATE_COMMAND_UI 表示更新 UI 的命令消息。

  •  pExtra:指向命令的额外信息的指针。

  •  pHandlerInfo:命令处理程序的信息。


CMDIFrameWndEx 作为 CWnd 的派生类,可以覆盖 OnCmdMsg 方法以处理特定的命令消息。这是一种常见的用法,特别是在 MDI(Multiple Document Interface)应用程序中,用于处理与文档视图相关的命令。

以下是一个简单的示例:
BOOL CMyMDIFrameWnd::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
    // 自定义命令处理逻辑
    if (nID == ID_CUSTOM_COMMAND) {
        // 处理自定义命令
        // ...
        return TRUE;  // 表示命令已被处理
    }

    // 调用基类的 OnCmdMsg 处理其他命令
    return CMDIFrameWndEx::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

在这个示例中,当收到自定义命令(假设命令的 ID 是 ID_CUSTOM_COMMAND)时,OnCmdMsg 方法会处理该命令,然后返回 TRUE 表示命令已被处理。如果命令不是自定义命令,它会调用基类的 OnCmdMsg 来处理其他命令。




转载请注明出处:http://www.zyzy.cn/article/detail/18898/MFC/CMDIFrameWndEx