文档视图结构解析-文档与视图交互

需积分: 0 2 下载量 181 浏览量 更新于2024-08-19 收藏 755KB PPT 举报
"这篇文档主要介绍了VC++中的文档视图结构,特别强调了文档与视图的相互作用,以及如何通过`CView::GetDocument`和`CDocument::UpdateAllViews`函数实现通信。文档视图结构是MFC(Microsoft Foundation Classes)库中的核心设计模式,用于构建用户界面。它将数据(文档)与显示数据的方式(视图)分离,使得应用程序可以有多个视图同时查看和编辑同一份文档。" 在MFC中,文档视图结构是一个关键的概念,它分为以下几个部分: 7.1 文档模板 文档模板(Document Template)是连接应用程序中的文档类、视图类和框架窗口类的桥梁。它负责创建、管理和存储这些对象。例如,在代码示例中,`CMultiDocTemplate` 被用来创建一个多文档模板,关联了`CEx_MDIDoc`(文档类)、`CChildFrame`(MDI文档窗口类)和`CEx_MDIView`(视图类)。`InitInstance`方法中的`AddDocTemplate`用于注册这个模板,以便后续使用。 7.1.1 文档模板类 `CMultiDocTemplate` 类是文档模板的基础,用于处理不同类型的文档。通过运行时类(RUNTIME_CLASS)宏,你可以指定与模板相关的具体类。 7.1.2 文档模板字串资源 这些字符串资源用于设置文档类型、标题等信息,可以在资源编辑器中直接修改,或通过应用程序创建向导的高级选项指定。 7.1.3 使用多个文档类型 演示了如何创建和配置多个文档类型的步骤,包括在StringTable资源中修改 IDR_MAINFRAME 字符串。 7.4 文档视图结构 7.4.1 文档与视图的相互作用 `CView::GetDocument` 函数允许视图访问与其相关联的文档。通常,这是一个安全的内联函数,确保返回的指针指向正确的文档类。`GetDocument` 调用会执行派生类中的实现,返回指向用户派生文档类的指针。 7.4.2 `CDocument::UpdateAllViews` `UpdateAllViews` 是一个重要的文档成员函数,用于通知所有关联的视图进行更新。当指定的视图(`pSender`)之外的其他视图需要刷新时,会调用它们的`OnUpdate`函数。这使得在文档数据更改时,所有视图都能同步更新显示。 在MFC的文档/视图架构中,`CDocument`对象保存数据,`CView`对象负责显示数据,并且两者通过上述的`GetDocument`和`UpdateAllViews`函数保持通信。这种设计模式使得可以灵活地创建具有多个视图的复杂用户界面,同时保持数据和显示的分离,提高了代码的可维护性和复用性。