CMultiDocTemplate 类

定义实现多文档界面 (MDI) 的文档模板。

语法

class CMultiDocTemplate : public CDocTemplate

成员

此类的成员函数是虚拟的。 相关信息,请参阅 CDocTemplateCCmdTarget 文档。

公共构造函数

名称 描述
CMultiDocTemplate::CMultiDocTemplate 构造 CMultiDocTemplate 对象。

备注

MDI 应用程序使用主框架窗口作为工作区,用户可在其中不打开或打开多个文档框架窗口,每个窗口显示有文档。 有关 MDI 更详细的说明,请参阅 Windows 软件设计界面指南

文档模板定义了三种类之间的关系:

  • 派生自 CDocument 的文档类。

  • 视图类,显示上面列出的文档类中的数据。 可从 CViewCScrollViewCFormViewCEditView 获得此类。 (你也可以直接使用 CEditView。)

  • 包含视图的框架窗口类。 对于 MDI 文档模板,可从 CMDIChildWnd 获得此类,或者如果不需要自定义文档框架窗口的行为,可以直接使用 CMDIChildWnd,而无需获取自己的类。

MDI 应用程序可以支持多种文档,并且你可以同时打开不同类型的文档。 应用程序对于它支持的每种文档都有一个文档模板。 例如,如果 MDI 应用程序同时支持电子表格和文本文档,则该应用程序有两个 CMultiDocTemplate 对象。

当用户创建新文档时,应用程序使用文档模板。 如果应用程序支持多种文档,则框架将从文档模板中获取受支持文档类型的名称,并在新建文件对话框的列表中显示它们。 用户选择文档类型后,应用程序创建文档类对象、框架窗口对象和视图对象,并将它们相互关联。

无需调用除构造函数以外的任何 CMultiDocTemplate 成员函数。 框架在内部处理 CMultiDocTemplate 对象。

有关 CMultiDocTemplate 的详细信息,请参阅文档模板和文档/视图创建过程

继承层次结构

CObject

CCmdTarget

CDocTemplate

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 类