我用vc6的生成向导生成了一个不使用document/view结构的运用程序。
仔细看了一下他的结构,发现了一个函数如下(摘自mfc源代码):
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// let the view have first crack at the command
if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
{
return TRUE;
}
// otherwise, do default handling
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
开始的时候,我对这段代码很不理解,因为OnCmdMsg函数是处理WM_COMMAND消息的。参照CFrameWnd::OnCmdMsg,CView::OnCmdMsg,CCmdTarget::OnCmdMsg,CDocument::OnCmdMsg的说明。似乎整个WM_COMMAND消息的流动路线已经被定型了,如下:
(图片摘自vckbase.com)
CFrameWnd::OnCmdMsg函数的部分代码如下:
BOOL CFrameWnd::OnCmdMsg(UINT nID, int nCode, voi

本文探讨了一种在不使用文档视图结构的MFC应用程序中,CMainFrame::OnCmdMsg如何处理WM_COMMAND消息。文章指出CFrameWnd::GetActiveView在非文档视图结构中通常返回NULL,导致消息无法正确传递给视图。作者通过测试发现,必须在CMainFrame::OnCmdMsg中直接调用m_wndView.OnCmdMsg以确保消息传递给视图。作者正寻找更多关于CFrameWnd::GetActiveView的资料以验证其理解,并欢迎读者指正错误。
最低0.47元/天 解锁文章
1257





