更新日期:2010-12-29
测试环境:VC6.0+WinXP
━━━━━━━━━━━━━━━━━━━━━━━━
/****************************************************************************
创建一个多文档多视图的程序
多文档多视图示例工程:
下载:http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC/MultiView.zip
更多视图类的资料下载:
http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC/MultiViewInfo.zip
zip里有如下文件:
1.转贴:单文档多视图.mht
2.标签切换视图.rar
3.标签切换视图 多文档 tab Automatic Tab Bar for MDI Frameworks.zip
4.单文档多视图的实现 - yangsh3002的专栏 - CSDN博客.mht
5.单文档多视图.docx
1.用VC6创建一个多文档(设定名称为Multi)
2.新建一个类CMyEditView继承于CEditView(这就是我们自己手动添加的一个新视图类)
3.在Multi.h里添加2个文档指针。(并且是public)
CMultiDocTemplate* pDocTemplate;
CMultiDocTemplate* pEditViewDocTemplate;
4.修改工程里的Multi.cpp。在函数BOOL CMultiApp::InitInstance()里
1)把CMultiDocTemplate* pDocTemplate;这一句去掉(因为步骤3已经定义它了)
2)修改代码:
//原来的代码
pDocTemplate = new CMultiDocTemplate(
IDR_MULTITYPE,
RUNTIME_CLASS(CMultiDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMultiView));
AddDocTemplate(pDocTemplate);
//我们自己多添加的代码
pEditViewDocTemplate = new CMultiDocTemplate(
IDR_MULTITYPE,
RUNTIME_CLASS(CMultiDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMyEditView));
AddDocTemplate(pEditViewDocTemplate);
5.如果你不想程序启动时就创建一个空文档,则:
在你的XXXXAPP类的InitInstance函数内部,修改以下语句块
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing;//添加语句
if (!ProcessShellCommand(cmdInfo))
return FALSE;
6.添加2个菜单项,比如OnView1 和OnView2
void CMainFrame::OnView1()
{
CMultiApp* pApp = (CMultiApp *)AfxGetApp();
pApp->pEditViewDocTemplate->OpenDocumentFile(NULL) ;
}
void CMainFrame::OnView2()
{
CMultiApp* pApp = (CMultiApp *)AfxGetApp();
pApp->pDocTemplate->OpenDocumentFile(NULL) ;
}
****************************************************************************/