MFC由多文档转换为单文档

时间:2022-08-23 05:05:57
问题背景:
        最近做了一个工程,开始时是用多文档创建的,用到了CSplitter划分为四个窗格,代码放在MainFrame里面。但我想获得文档时总是出错。后来通过调试发现编译时是先编译的视类再编译的文档类,通过上网查资料,最后决定改为单文档。
多文档改单文档步骤:
1.首先找到CXxxApp类里的InitInstance函数 (其中Xxx为你自己创建的类名称)
将多文档模块改为添加单文档模块
CSingleDocTemplate * pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
        IDR_XxxTYPE,
        //IDR_MAINFRAME,
        RUNTIME_CLASS(CXxxDoc),
        RUNTIME_CLASS(CMainFrame), // custom MDI child frame
        RUNTIME_CLASS(CXxxView));
    AddDocTemplate(pDocTemplate);

注释掉接下来的部分
    // create main MDI Frame window
/*    CMainFrame* pMainFrame = new CMainFrame;
    if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
        return FALSE;
    m_pMainWnd = pMainFrame;*/

将下列代码
    // The main window has been initialized, so show and update it.
/*    pMainFrame->ShowWindow(m_nCmdShow);
    pMainFrame->UpdateWindow();*/
改为:
m_pMainWnd->ShowWindow(m_nCmdShow);
 m_pMainWnd->UpdateWindow();


2.找到CMainFram函数,将其继承关系改为:CFrameWnd(注意:h文件和cpp文件都要改,最好用菜单下的replace,选中Match the Whole Word)

3.将CMainFrame里面的头文件里的宏改为DECLARE_DYNCREATE(CMainFrame),cpp里面的改为IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)...

注意你的第一步添加文档模块时的第一个参数IDR_XxxTYPE,//IDR_MAINFRAME,这两个都试一下,因为有可能你在编程过程中改过资源。

心得:在出现问题后需要静下来一步步跟踪,直到发现问题,并试着自己去解决!