文档、视图和框架

MFC 框架的核心是文档和视图的概念。 文档是用户在编辑会话中与之进行交互的数据对象。 它由“文件”菜单上的“新建”或“打开”命令创建,并且通常保存在一个文件中。 (标准 MFC 文档派生自 CDocument 类,不同于活动文档和 OLE 复合文档)。视图是用户与文档进行交互所用的窗口对象。

一个正在运行的应用程序中的关键对象有:

  • 线程对象

    如果应用程序创建不同的执行线程(例如,在后台执行计算),则你将使用从 CWinThread 派生的类。 CWinApp 本身派生自 CWinThread 并表示应用程序中的主执行线程(或主进程)。 还可以在辅助线程中使用 MFC。

  • 应用程序对象

    你的应用程序类(派生自 CWinApp)控制上面的所有对象并指定应用程序行为,如初始化和清理。 应用程序仅有的一个应用程序对象为应用程序支持的任何文档类型创建和管理文档模板。

  • 一个或多个文档模板

    文档模板可协调文档、视图和框架窗口的创建。 派生自 CDocTemplate 类的特定文档模板类创建并管理一个类型的所有打开的文档。 支持多种文档类型的应用程序具有多个文档模板。 将 CSingleDocTemplate 类用于 SDI 应用程序,或将 CMultiDocTemplate 类用于 MDI 应用程序。

  • 框架窗口

    视图显示在“文档框架窗口”内。在 SDI 应用程序中,文档框架窗口也是应用程序的“主框架窗口”。 在 MDI 应用程序中,文档窗口是显示在主框架窗口中的子窗口。 派生的主框架窗口类指定包含您的视图的框架窗口的样式和其他特性。 如果需要自定义框架窗口,请从 CFrameWnd 派生以自定义 SDI 应用程序的文档框架窗口。 从 CMDIFrameWnd 派生以自定义 MDI 应用程序的主框架窗口。 另外,请从 CMDIChildWnd 派生一个类以自定义应用程序支持的每种不同的 MDI 文档框架窗口。

  • 一个文档或多个文档。

    文档类(派生自 CDocument)指定应用程序的数据。

    如果你在应用程序中需要 OLE 功能,请从 COleDocument 或其派生类之一派生文档类,这取决于你需要的功能类型。

  • 一个视图或多个视图。

    视图类(派生自 CView)是用户的“数据窗口”。视图类控制用户如何查看文档数据并与之交互。 在某些情况下,您可能希望一个文档拥有多个数据视图。

    如果需要滚动,请从 CScrollView 派生。 如果视图拥有一个在对话框模板资源中布局的用户界面,请从 CFormView 派生。 对于简单的文本数据,请使用 CEditView 或从中派生。 对于基于窗体的数据访问应用程序(如数据输入程序),请从 CRecordView 派生(对于 ODBC)。 此外,还有 CTreeViewCListViewCRichEditView 类。

在一个正在运行的应用程序中,这些对象以协作方式响应用户操作(由命令和其他消息绑定在一起)。 一个应用程序对象管理一个或多个文档模板。 每个文档模板创建并管理一个或多个文档(具体取决于应用程序是 SDI 还是 MDI)。 用户通过包含在框架窗口中的视图查看和操作文档。 下图演示了 SDI 应用程序的这些对象之间的关系。

Diagram of the objects in a running SDI application.
运行 SDI 应用程序中的对象

本系列文章的其他部分介绍了框架工具、MFC 应用程序向导和资源编辑器如何创建这些对象,如何协同工作以及如何在编程中使用它们。 窗口对象文档/视图体系结构中更详细地讨论了文档、视图和框架窗口。

另请参阅

使用类编写 Windows 应用程序