MFC 框架的核心是文档和视图的概念。 文档是用户在编辑会话中交互的数据对象。 它由“文件”菜单上的“新建”或“打开”命令创建,通常保存在文件中。 (标准 MFC 文档派生自类 CDocument,不同于活动文档和 OLE 复合文档。视图是一个窗口对象,用户通过该对象与文档交互。
正在运行的应用程序中的关键对象包括:
- 线程对象 - 如果应用程序创建单独的执行线程(例如,在后台执行计算),将使用派生自 - CWinThread的类。- CWinApp本身派生自- CWinThread应用程序中的执行(或主进程)的主线程。 还可以在辅助线程中使用 MFC。
- 应用程序对象 - 应用程序类(派生自 - CWinApp)控制上述所有对象,并指定应用程序行为,例如初始化和清理。 应用程序的一个和唯一的应用程序对象为应用程序支持的任何文档类型创建和管理文档模板。
- 一个或多个文档模板 - 文档模板协调文档、视图和框架窗口的创建。 从类 - CDocTemplate派生的特定文档模板类创建和管理一种类型的所有打开的文档。 支持多种类型的文档的应用程序具有多个文档模板。 将类 CSingleDocTemplate 用于 SDI 应用程序,或使用 MDI 应用程序的类- CMultiDocTemplate。
- 框架窗口 - 视图显示在“文档框架窗口”内。在 SDI 应用程序中,文档框架窗口也是应用程序的“主框架窗口”。 在 MDI 应用程序中,文档窗口是主框架窗口中显示的子窗口。 派生的主框架窗口类指定包含视图的框架窗口的样式和其他特征。 如果需要自定义框架窗口,应该从 - CFrameWnd派生,以便自定义 SDI 应用程序的文档框架窗口。 从- CMDIFrameWnd派生以自定义 MDI 应用程序的主框架窗口。 此外,从- CMDIChildWnd派生一个类,以便自定义您应用程序支持的每一种特定类型的 MDI 文档框架窗口。
- 一个文档或多个文档。 - 文档类(派生自 - CDocument)指定应用程序的数据。- 如果希望在应用程序中使用 OLE 功能,请根据所需功能类型从 - COleDocument或其派生类之一派生文档类。
- 一个视图或多个视图。 - 视图类(派生自 - CView)是用户的“数据窗口”。视图类控制用户如何查看文档的数据并与之交互。 在某些情况下,你可能希望文档具有数据的多个视图。- 如果需要滚动,请从 - CScrollView派生。 如果视图拥有一个在对话框模板资源中布局的用户界面,请从- CFormView派生。 对于简单的文本数据,请使用- CEditView或从中派生。 对于基于窗体的数据访问应用程序(如数据输入程序),请从- CRecordView派生(对于 ODBC)。 此外,还有类- CTreeView,- CListView以及- CRichEditView。
在正在运行的应用程序中,这些对象协作响应用户作,由命令和其他消息绑定在一起。 单个应用程序对象管理一个或多个文档模板。 每个文档模板创建和管理一个或多个文档(具体取决于应用程序是 SDI 还是 MDI)。 用户通过包含在框架窗口中的视图查看和操作文档。 下图显示了 SDI 应用程序在这些对象之间的关系。

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