我现在想不通过文档模板创建文档对象,并自行创建视图对象,添加到文档中,问题是,现在在我所创建的文档中无法响应菜单\工具栏中的按钮的消息,请问如何做能响应菜单/工具栏消息?
创建文档及视图的代码如下:
CRuntimeClass * pDocRC = RUNTIME_CLASS(CDebugApplicationObj);
CRuntimeClass * pViewRC = RUNTIME_CLASS(CTreeView);
if(pDocRC && pViewRC)
{
CView * pView = (CView *)pViewRC ->CreateObject();
CDocument * pDoc = (CDocument *)pDocRC ->CreateObject();
if(pDoc && pView)
{
pView ->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(100,100,300,300),this, 0,NULL);
pDoc ->AddView(pView);
}
}
为了测试,我暂时将这段代码放在了MDI MainFrame的OnCrate函数中了.
如果我用文档模板创建上面的文档,则一切OK.感觉是因为有文档模板使消息无法达到CDebugApplicationObj类.
创建文档及视图的代码如下:
CRuntimeClass * pDocRC = RUNTIME_CLASS(CDebugApplicationObj);
CRuntimeClass * pViewRC = RUNTIME_CLASS(CTreeView);
if(pDocRC && pViewRC)
{
CView * pView = (CView *)pViewRC ->CreateObject();
CDocument * pDoc = (CDocument *)pDocRC ->CreateObject();
if(pDoc && pView)
{
pView ->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(100,100,300,300),this, 0,NULL);
pDoc ->AddView(pView);
}
}
为了测试,我暂时将这段代码放在了MDI MainFrame的OnCrate函数中了.
如果我用文档模板创建上面的文档,则一切OK.感觉是因为有文档模板使消息无法达到CDebugApplicationObj类.
我觉得问题很可能出在没有用文档模板上。后来想了想,觉得是否应该重载CMainFrame的OnCmdMsg函数,在里面添加我的文档的 OnCmdMsg以处理命令消息?
学习中
怎么改消息映射?
昨晚看了一下命令消息在文档视图中的传递路径:
菜单->MDIMainFrame->ChildFrame->ActiveView->Document->DocTemplate
\--------/ \---------------------------------/
|
\|/
CWinApp我重载了主框架的OnCmdMsg
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// TODO: Add your specialized code here and/or call the base class
BOOL bRes = CMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
if(!bRes && m_pTestDoc) //add by nx
bRes = m_pTestView ->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
return bRes;
//return CMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
可以收到菜单消息了,但是视图还收不到鼠标消息.