VC6.0 怎样将MFC的单文档程序转换成多文档

由于之前没有考虑到后期程序要用到多文档程序,代码已经写了很多,不想重新新建多文档工程重新写一遍,因此结合网上几篇文章(http://blog.csdn.net/z397164725/article/details/7331556http://blog.csdn.net/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;


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值