命令处理的默认路由是:视图 -> 文档 -> 文档模板 -> 框架窗口 -> 应用对象。
补充说明:
菜单、工具栏等隶属于框架窗口,所以命令首先到达框架窗口。框架窗口得到命令消息后,按照上述的过程处理命令。
要想改变默认的命令处理过程,定制自己的处理过程,则需要重载上述命令路由链中的某个对象的OnCmdMsg()函数。
例如:下面的代码重载框架窗口的OnCmdMsg()函数,使得活动文档直接处理ID_GETDOC命令。
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
if(nID == ID_GETDOC)
{
CDocument* pDoc = this->GetActiveDocument();
if(pDoc)
{
pDoc->OnCmdMsg(ID_GETDOC, CN_COMMAND, NULL, NULL;
return TRUE;
}
}
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}