MFC由多文档转换为单文档
问题背景:
最近做了一个工程,开始时是用多文档创建的,用到了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,这两个都试一下,因为有可能你在编程过程中改过资源。
心得:在出现问题后需要静下来一步步跟踪,直到发现问题,并试着自己去解决!
最近做了一个工程,开始时是用多文档创建的,用到了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,这两个都试一下,因为有可能你在编程过程中改过资源。
心得:在出现问题后需要静下来一步步跟踪,直到发现问题,并试着自己去解决!