我现在想不通过文档模板创建文档对象,并自行创建视图对象,添加到文档中,问题是,现在在我所创建的文档中无法响应菜单\工具栏中的按钮的消息,请问如何做能响应菜单/工具栏消息?
创建文档及视图的代码如下:
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类.

解决方案 »

  1.   

    我没有修改消息映射.
    我觉得问题很可能出在没有用文档模板上。后来想了想,觉得是否应该重载CMainFrame的OnCmdMsg函数,在里面添加我的文档的 OnCmdMsg以处理命令消息?
    学习中
      

  2.   

    to feiniaoliang(飞鸟良):
    怎么改消息映射?
      

  3.   

    部分解决了:
    昨晚看了一下命令消息在文档视图中的传递路径:
    菜单->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);
    }
    可以收到菜单消息了,但是视图还收不到鼠标消息.