字体
第(2/4)页
关灯
   存书签 书架管理 返回目录
 ? SDI 程序仅仅基于主框架窗口(CMainFrcom),而MDI 程序同时基于主框架窗口

    (CMainFrcom)和子框架窗口(CChildFrcom)。

    ? 对于管理文档、框架和窗口的文档模板类,两种结构也有本质的差别。SDI 程序基于

    的文档模板类是CSingleDocTemplate,只能管理单个文档类型;而MDI 程序基于的文

    档模板类是CMultiDocTemplate,能同时创建多种文档类型。

    ? 只能向SDI 应用程序类中加入一种文档模板,而可以向MDI 应用程序类中加入多个

    CMultiDocTemplate 对象。

    SDI 程序和MDI 程序的文档视图结构都是由文档模板管理的,下面针对MDI 应用程序

    的情况介绍文档模板在编程的应用。

    每个应用程序类(CWinApp 的派生类)中都保留并维护了一份所有文档模板的指针列表,

    这是一个链表结构。应用程序为所要支持的每个文档类型动态分配一个CMultiDocTemplate

    对象,并在应用程序类的CWinApp::InitInstance 成员函数中将每个CMultiDocTemplate 对象

    传递给CWinApp::AddDocTemplate,该函数将一个文档模板加入到应用程序可用文档模板的

    列表中。应用程序可以用CWinApp::GetFirstDocTemplatePostion 获得应用程序注册的第一个

    文档模板的位置,利用该值来调用CWinApp::GetNextDocTemplate 函数,获得第一个

    CDocTemplate 对象指针。

    一个文档模板可以有多个文档,每个文档模板都保留并维护了一个所有对应文档的指针

    列表。应用程序可以用CDocTemplate::GetFirstDocPosition 函数获得与文档模板相关的文档集

    合中第一个文档的位置,并用POSITION 值作为CDocTemplate::GetNextDoc 的参数来重复遍

    历与模板相关的文档列表。

    在文档中可以调用CDoccomnt::GetDocTemplate 获得指向该文档模板的指针。一个文档

    可以有多个视图,每一个文档都保留并维护一个所有相关视图的列表。CDoccomnt::AddView

    将一个视图连接到文档上,将该视图加入到文档相联系的视图的列表中,并将视图的文档指

    针指向该文档。当有选择菜单命令“ File|New” 、“ File|Open ”、“Windows|New” 或

    “Window|Split”菜单命令而将一个新创建的视图的对象连接到文档上时,MFC 会自动调用该

    函数,框架通过文档视图结构将文档和视联系起来。当然,也可以根据特定需要手动调用该

    函数。

    技巧:使MDI 启动时不建立一个新文件

    使用AppWizard 工具生成的MDI 程序启动时会默认创建一个空白文件,这有时候会带来

    麻烦(也许在程序启动时不允许创建新文件)。为了使MDI 启动时不建立一个新文件,需

    要修改InitInstance()函数如下:

    CCommandLineIn
上一页 目录 下一页