由于之前没有考虑到后期程序要用到多文档程序,代码已经写了很多,不想重新新建多文档工程重新写一遍,因此结合网上几篇文章(http://blog.youkuaiyun.com/z397164725/article/details/7331556,http://blog.youkuaiyun.com/wirror800/article/details/3930773)进行探讨,最终成功,步骤方法如下:(将单文档程序名字设为Test,多文档程序名字为TestMulti)
1.增加与修改子框架ChildFrm
1.1 新增ChildFrm.h文件
FILE->NEW->C/C++ Header File->File名称输入ChildFrm->OK
启动VC6.0,再随意新建一个多文档程序,名字为TestMulti。将其ChildFrm.h文件中的内容全部复制过来。
1.2 新增ChildFrm.cpp文件
FILE->NEW->C++ Source File->File名称输入ChildFrm->OK
将1.1中创建的多文档程序中ChildFrm.cpp文件中的内容全部复制过来。
并将#include "TestMulti.h"改成#include "**.h"(你的单文档程序的名字,如Test)
2.修改主框架MainFrm
2.1 将MainFrm.h中的
class CMainFrame : public CFrameWnd
{
protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
改成
class CMainFrame : public CMDIFrameWnd
{
public: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
2.2 将MainFrm.cpp中的IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)改成IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd);将BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)改成BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
3.在cpp文件中加上子框架的头文件
在ClassView选项中找到C**App类(如CTestApp)的.Cpp文件。加上#include "ChildFrm.h"
4.修改C**App类(CTestApp)的InitInstance函数
4.1
将
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CTestView));
改成
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_TESTTYPE,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CTestView));
4.2
在AddDocTemplate(pDocTemplate);与CCommandLineInfo cmdInfo;之间加上以下代码创建主框架:
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
{
delete pMainFrame;
return FALSE;
}
m_pMainWnd = pMainFrame;