我想更改框架生成的“新建”和“保存”命令,但是在CChildFrame中映射ID_FILE_OPEN,再设断点看有没有执行到这,结果没有啊,应该怎么更改它的默认行为呢?

解决方案 »

  1.   

    因为这些行为都是MFC类的缺省行为。你需要自己呼应这两个命令。
      

  2.   

    一定要在在CMainFrame中响应这个命令吗?
    那如果已经打开了一个或多个视后,不就是进入到CChildFrame了吗?
    如果是这样的话,再按这些命令的话不就是调用了CChildFrame中的响应函数吗?
    我是新手,请大家指点指点.
      

  3.   

    在CMDIFrameWnd::OnCreate中创建mdi子窗口。可以在mdi子窗口中添加WM_CREATE的处理,每次默认的新建,打开动作,都会调用他。
      

  4.   

    去文档类里面重载,新建 保存 都是 CDocument的动作,文档类里提供了接口的
      

  5.   

    一.创建文档
    ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)
    入口:CWinApp::OnFileNew
    CWinApp对OnFileNew的默认实现是调用:CdocManager::OnFileNew()
    1.判断有无文档模板,无则函数返回;
    2.判断是否有多个文档模板,如有则启动文档模板选择对话框,让用户选择一个模板后,返回模板指针.
    3.由模板指针访问CMultiDocTemplate::OpenDocumentFile()
    3.1 创建新文档对象
    3.2 创建与新文档对象对应的子框架,构筑子框架,文档和视窗之间的关系
    3.3 调用应用程序的OnNewDocument()
      a.调用CDocument::OnNewDocument()
        调用应用程序的DeleteContents();
      b.用户代码
    3.4 调用InitialUpdateFrame()显示视窗
    3.5 返回文档指针
    4.返回
      

  6.   

    利用向导添加“ID_FILE_NEW”的消息函数
      

  7.   

    1、当没有任何文档被打开时,MFC框架会映射CWinApp中的ID_FILE_NEW
    2、当文档被打开时,如在文档类中响应ID_FILE_NEW,则MFC会映射到C***Doc中的OnFileNew()
    3、当然,你也可以在CMainFrame里面映射ID_FILE_NEW
      

  8.   

    // 在MainFrm.cpp文件中:
    // 这里是消息映射BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_COMMAND(ID_FILE_NEW, CMainFrame::OnFileNew) //映射到CMainFrame的OnFileNew
             ON_WM_CREATE()
    // 全局帮助命令
    ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFinder)
    ON_COMMAND(ID_HELP, CFrameWnd::OnHelp)
    ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp)
    ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder)
    END_MESSAGE_MAP()
      

  9.   

    重载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
    if(nID==ID_FILE_NEW)return false;
    return CMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
    }
    //当然不一定非这样添在这儿,
      

  10.   

    CMainFrame里重载这几个消息不就行了!!!
      

  11.   

    在CMainFrame重载了,但它不执行我重载的消息处理函数.