注释
Microsoft基础类(MFC)库将继续受到支持。 但是,我们不再添加功能或更新文档。
文档/视图创建中介绍了文档、视图和框架窗口之间的标准关系。 许多应用程序支持单个文档类型(但可能有多个打开的该类型的文档),文档上只有一个视图,每个文档只有一个框架窗口。 但某些应用程序可能需要更改其中一个或多个默认值。
你想进一步了解什么
多个文档类型
MFC 应用程序向导会为你创建一个文档类。 但在某些情况下,可能需要支持多个文档类型。 例如,应用程序可能需要工作表和图表文档。 每个文档类型都由自己的文档类表示,也可能由自己的视图类表示。 当用户选择“文件新建”命令时,框架将显示一个对话框,其中列出了受支持的文档类型。 然后,它会创建用户选择的类型的文档。 每个文档类型都由其自己的文档模板对象管理。
若要创建额外的文档类,请参阅 “添加类”。 选择 CDocument 作为派生自的类类型,并提供请求的文档信息。 然后实现新类的数据。
若要让框架了解额外的文档类,必须在应用程序类的 InitInstance 重写中添加对 AddDocTemplate 的第二次调用。 有关详细信息,请参阅 文档模板。
多视图
许多文档只需要一个视图,但可以支持单个文档的多个视图。 为了帮助你实现多个视图,文档对象保留其视图的列表,提供用于添加和删除视图的成员函数,并提供 UpdateAllViews 成员函数,以便让多个视图知道文档的数据何时发生更改。
MFC 支持三个需要同一文档上多个视图的常见用户界面。 这些模型包括:
查看同一类的对象,每个对象位于单独的 MDI 文档框架窗口中。
你可能想要支持在文档上创建第二个框架窗口。 用户可以选择“新建窗口”命令以打开具有相同文档视图的第二个框架,然后使用这两个框架同时查看文档的不同部分。 该框架通过复制附加到文档的初始框架窗口和视图,支持 MDI 应用程序的“窗口”菜单上的“新建窗口”命令。
在同一文档框架窗口中查看同一类的对象。
拆分窗口将单个文档窗口的视图空间拆分为文档的多个单独视图。 框架从同一视图类创建多个视图对象。 有关详细信息,请参阅 “Splitter”窗口。
在单个框架窗口中查看不同类的对象。
在此模型中,拆分窗口的变体(即多视图)共享单个框架窗口。 视图是从不同的类构造的,每个视图都提供了查看同一文档的不同方法。 例如,一个视图可能会在正常模式下显示字处理文档,而另一个视图则以大纲模式显示文档。 拆分器控件允许用户调整视图的相对大小。
下图分为 a、b 和 c 部分,按上面显示的顺序显示三个用户界面模型。
Multiple-View 用户界面
框架通过实现 New Window 命令并提供 类 CSplitterWnd 来提供这些模型,如 拆分器 Windows 中所述。 可以使用这些模型作为起点实现其他模型。 有关演示视图、帧窗口和拆分器不同配置的示例程序,请参阅 MFC 示例。
有关 UpdateAllViews的详细信息,请参阅 MFC 参考 中的 CView 类和 Scribble 示例。
多框架窗口
可以在 MDI 应用程序的“窗口”菜单上使用“新建窗口”命令在同一文档上创建第二个框架窗口。 有关详细信息,请参阅图 Multiple-View 用户界面的第一个模型。
拆分窗口
在拆分器窗口中,窗口可以拆分为两个或多个可滚动窗格。 滚动条旁边的窗口框架中的拆分器控件(或“拆分框”)允许用户调整窗格的相对大小。 每个窗格都是同一文档上的视图。 在“动态”拆分条中,视图属于同一类,如图 多视图用户界面中的 b 部分所示。 在“静态”拆分器中,视图可以是不同的类。 这两种类型的拆分窗口都受 CSplitterWnd 类支持。
动态拆分器窗口(具有相同类的视图)允许用户将窗口拆分为多个窗格,然后滚动不同的窗格以查看文档的不同部分。 用户还可以取消拆分窗口以删除其他视图。 添加到 Scribble 示例 的拆分窗口即属此例。 本主题介绍用于创建动态拆分器窗口的技术。 该主题描述创建动态拆分窗口的技术。动态拆分窗口如图 多视图用户界面的 b 部分所示。
静态拆分器窗口中,各个窗格的视图属于不同的类别。窗口最初被拆分成多个窗格,每个窗格都有不同的用途。 例如,在 Visual Studio 位图编辑器中,图像窗口并排显示两个窗格。 左窗格显示位图实物原样大小的图像。 右窗格显示同一位图的缩小或放大的图像。 窗格由用户可以拖动的“拆分条”分隔开来更改窗格的相对大小。 静态拆分器窗口显示在图 Multiple-View 用户界面的 c 部分。
有关详细信息,请参阅 MFC 参考和 MFC 示例中的类 CSplitterWnd。