向文档/视图结构的选择

MFC 应用程序通常使用文档/视图结构管理信息、文件格式和数据的可视化表示形式给用户。对于大多数桌面应用程序,文档/视图结构是一个适当有效的应用程序体系结构。此体系结构与查看数据分割,因此,大多数情况下,可以简化应用程序并减少冗余代码。

但是,文档/视图结构为某些情况下不合适。考虑以下示例:

  • 如果移植 C 编写的应用程序窗口中,您可能希望在添加之前执行一些端口文档/视图支持对您的应用程序。

  • 如果您正在编写一个轻量实用工具,您可能会发现可以执行,不使用文档/视图结构。

  • 如果原始代码与数据查看已组合数据管理,将代码移动到文档/视图模型不值该工作,因为您必须将这两个。您可能更愿意脱离代码。

创建不使用文档/视图结构的应用程序,清除复选框 文档/视图结构支持(V) 在 MFC 应用程序向导的第 1 步。请参见 MFC 应用程序向导 有关详细信息。

说明说明

MFC 应用程序向导产生的基于对话框的应用程序不使用文档/视图结构,因此, 文档/视图结构支持(V) 禁用复选框,如果选择对话框应用程序类型。

Visual C++ 向导,以及源和对话框编辑器,与生成的应用程序一起就象处理其他任何向导生成的应用程序。应用程序可以支持工具栏、 scrollbars 和状态栏中显示,并具有 关于 框。您的应用程序注册的任何不会文档模板,因此,它不包含文档类。

请注意生成的应用程序具有视图类, CChildView,从派生 CWnd。MFC 创建并确定视图类的一个实例在应用程序中创建的框架窗口中。,因为它简化确定和管理应用程序的内容,请使用视图窗口, MFC 仍强制。可以将绘制代码到此类的 OnPaint 成员。您的代码应添加滚动到视图 (而不是为帧。

由于文档/视图结构由 MFC 提供的实现许多应用程序的基本功能,它在项目的请假负责意味着您负责实现您的应用程序许多重要功能:

  • 根据提供的 MFC 应用程序向导,您的应用程序菜单包含 New 并仅 Exit 命令在 文件 菜单。( New 命令不能在 MDI 应用程序,而不 SDI 应用程序支持文档/视图支持。)生成的菜单资源不支持 MRU (最近使用) 列表。

  • 必须添加处理程序函数和来实现您的应用程序支持的所有命令的,包括 打开保存文件 菜单。MFC 通常提供代码支持这些功能,但是,) 支持紧密绑定到文档/视图结构。

  • 应用程序的工具栏,因此,如果请求一,将为最小。

强烈建议使用 MFC 应用程序向导创建应用程序,不使用文档/视图结构,,因为该向导确保了正确的 MFC 体系结构。但是,因此,如果必须避免使用向导,这是使用的文档/视图结构几种方法在您的代码:

  • 将文档作为一个未使用的框并实现您在视图类的数据托管代码,如建议上面。文档的开销相对较少的。一个 CDocument 对象单独产生少量系统开销,以及小的开销 CDocument 的基类、 CCmdTargetCObject。后两个类都很小。

    声明在 CDocument:

    • CString 对象。

    • BOOLs。

    • CDocTemplate 指针。

    • CPtrList 对象,包含文档的视图的列表。

    此外,文档需要时创建文档对象、其视图对象、框架窗口和文档模板对象。

  • 将两个中的文档和视图视为未使用的框。将自己的数据管理和绘图代码在框架窗口而不是视图。此方法更接近 C 语言编程模型的环境。

  • 重写创建文档并查看消除创建它们 MFC 框架的一部分。文档创建过程将从调用开始。 CWinApp::AddDocTemplate。消除从应用程序类的 InitInstance 成员函数在 InitInstance 调用,因此,相反,创建框架窗口。将自己的数据管理代码在框架窗口类。文档/视图创建在 文档/视图创建处理说明。这是更多工作并需要对框架的更深的人员,但是,它完全抽象化您文档/视图开销。

这篇文章 MFC:使用数据库未类文档和视图 为具体示例文档/视图中选择在数据库应用程序中。

请参见

概念

文档/视图结构