CMultiDocTemplate 类
定义实现多文档界面 (MDI) 的文档模板。
语法
class CMultiDocTemplate : public CDocTemplate
成员
此类的成员函数是虚拟的。 相关信息,请参阅 CDocTemplate 和 CCmdTarget 文档。
公共构造函数
名称 | 描述 |
---|---|
CMultiDocTemplate::CMultiDocTemplate | 构造 CMultiDocTemplate 对象。 |
备注
MDI 应用程序使用主框架窗口作为工作区,用户可在其中不打开或打开多个文档框架窗口,每个窗口显示有文档。 有关 MDI 更详细的说明,请参阅 Windows 软件设计界面指南。
文档模板定义了三种类之间的关系:
派生自 CDocument 的文档类。
视图类,显示上面列出的文档类中的数据。 可从 CView、
CScrollView
、CFormView
或CEditView
获得此类。 (你也可以直接使用CEditView
。)包含视图的框架窗口类。 对于 MDI 文档模板,可从
CMDIChildWnd
获得此类,或者如果不需要自定义文档框架窗口的行为,可以直接使用 CMDIChildWnd,而无需获取自己的类。
MDI 应用程序可以支持多种文档,并且你可以同时打开不同类型的文档。 应用程序对于它支持的每种文档都有一个文档模板。 例如,如果 MDI 应用程序同时支持电子表格和文本文档,则该应用程序有两个 CMultiDocTemplate
对象。
当用户创建新文档时,应用程序使用文档模板。 如果应用程序支持多种文档,则框架将从文档模板中获取受支持文档类型的名称,并在新建文件对话框的列表中显示它们。 用户选择文档类型后,应用程序创建文档类对象、框架窗口对象和视图对象,并将它们相互关联。
无需调用除构造函数以外的任何 CMultiDocTemplate
成员函数。 框架在内部处理 CMultiDocTemplate
对象。
有关 CMultiDocTemplate
的详细信息,请参阅文档模板和文档/视图创建过程。
继承层次结构
CMultiDocTemplate
要求
标头:afxwin.h
CMultiDocTemplate::CMultiDocTemplate
构造 CMultiDocTemplate
对象。
CMultiDocTemplate(
UINT nIDResource,
CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass,
CRuntimeClass* pViewClass);
参数
nIDResource
指定与文档类型一起使用的资源的 ID。 这可能包括菜单、图标、快捷键表和字符串资源。
字符串资源最多包含由 \n 字符分隔的七个子字符串(如果不包含子字符串,则需要 \n 字符作为占位符;但是,结尾的 \n 字符不是必需的);这些子字符串描述文档类型。 有关子字符串的信息,请参阅 CDocTemplate::GetDocString。 此字符串资源可在应用程序的资源文件中找到。 例如:
// MYCALC.RC
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_SHEETTYPE "\nSheet\nWorksheet\nWorksheets (*.myc)\n.myc\n MyCalcSheet\nMyCalc Worksheet"
END
此字符串以 \n 字符开头,因为第一个子字符串不用于 MDI 应用程序,因此不包括在内。 可以使用字符串编辑器编辑此字符串;整个字符串在字符串编辑器中显示为单个条目,而不是七个单独的条目。
有关这些资源类型的详细信息,请参阅资源编辑器。
pDocClass
指向文档类的 CRuntimeClass
对象。 此类是你定义的用于表示文档的 CDocument
派生类。
pFrameClass
指向框架窗口类的 CRuntimeClass
对象。 此类可以是派生自 CMDIChildWnd
的类,或者如果你需要文档框架窗口的默认行为,此类也可以是 CMDIChildWnd
本身。
pViewClass
指向视图类的 CRuntimeClass
对象。 此类是你定义用于显示文档的CView
派生类。
注解
为应用程序支持的每个文档类型动态分配一个 CMultiDocTemplate
对象,并将每个对象从应用程序类的 InitInstance
成员函数传递到 CWinApp::AddDocTemplate
。
示例
// Code fragment from CMyApp::InitInstance
// Establish all of the document types
// supported by the application
AddDocTemplate(new CMultiDocTemplate(IDR_BRUSHDOCTYPE,
RUNTIME_CLASS(CBrushDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CBrushView)));
AddDocTemplate(new CMultiDocTemplate(IDR_DCDOCTYPE,
RUNTIME_CLASS(CDCDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CDCView)));
下面是第二个示例。
// Code fragment taken from CMyApp::InitInstance
// Normally, an application creates a document
// template and registers it with MFC as a part
// of its initialization.
// IDR_EXAMPLEDOCTYPE is a resource ID string; see
// the CDocTemplate class overview documentation
// for more information on its format.
// The next three parameters use the RUNTIME_CLASS()
// macro to get runtime type information for the doc,
// frame, and view classes that will be associated
// by the template.
pDocTemplate = new CMultiDocTemplate(IDR_EXAMPLEDOCTYPE,
RUNTIME_CLASS(CExampleDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CExampleView));
if (!pDocTemplate)
return FALSE;
// After the following call, MFC is aware of the doc
// template and will free it when the application is
// shut down. The doc templates known to MFC will
// automatically be used when CWinApp:OnFileOpen()
// or CWinApp::OnFileNew() are called.
AddDocTemplate(pDocTemplate);
另请参阅
CDocTemplate 类
层次结构图
CDocTemplate 类
CSingleDocTemplate 类
CWinApp 类