MFC 应用程序通常使用文档/视图体系结构来管理用户的信息、文件格式和数据的可视表示形式。 对于大多数桌面应用程序,文档/视图体系结构是一种适当的高效应用程序体系结构。 此体系结构将数据与查看分开,在大多数情况下,可以简化应用程序并减少冗余代码。
但是,文档/视图体系结构不适用于某些情况。 请考虑下列示例:
如果要移植使用 C for Windows 编写的应用程序,可能需要在向应用程序添加文档/视图支持之前完成端口。
如果要编写轻型实用工具,你可能会发现可以在不使用文档/视图体系结构的情况下执行此作。
如果原始代码已将数据管理与数据查看混合在一起,请将代码移动到文档/视图模型并不值得努力,因为必须分隔这两个代码。 你可能希望按原样保留代码。
若要创建不使用文档/视图体系结构的应用程序,请清除 MFC 应用程序向导步骤 1 中的 “文档/视图体系结构支持 ”复选框。 有关详细信息,请参阅 MFC 应用程序向导 。
注释
MFC 应用程序向导生成的基于对话框的应用程序不使用文档/视图体系结构,因此,如果选择对话框应用程序类型,将禁用 文档/视图体系结构支持 复选框。
视觉C++向导以及源和对话框编辑器与生成的应用程序一样,就像使用任何其他向导生成的应用程序一样。 应用程序可以支持工具栏、滚动条和状态栏,并具有“ 关于 ”框。 应用程序不会注册任何文档模板,并且不包含文档类。
请注意,生成的应用程序具有派生自CWnd
的视图类CChildView
。 MFC 在应用程序创建的框架窗口中创建并放置视图类的一个实例。 MFC 仍使用视图窗口强制实施,因为它简化了应用程序内容的定位和管理。 可以将绘制代码添加到 OnPaint
此类的成员。 代码应向视图添加滚动条,而不是向框架添加滚动条。
由于 MFC 提供的文档/视图体系结构负责实现应用程序的许多基本功能,因此项目中缺少文档/视图体系结构意味着你负责实现应用程序的许多重要功能:
如 MFC 应用程序向导提供,应用程序的菜单仅包含“文件”菜单上的“新建”和“退出”命令。 (仅 MDI 应用程序支持 新 命令,不支持没有文档/视图支持的 SDI 应用程序。生成的菜单资源将不支持 MRU(最近使用)列表。
必须为应用程序支持的任何命令添加处理程序函数和实现,包括“文件”菜单上的“打开”和“保存”。 MFC 通常提供代码来支持这些功能,但该支持严格绑定到文档/视图体系结构。
如果请求了一个工具栏,则应用程序工具栏将最小。
强烈建议使用 MFC 应用程序向导创建没有文档/视图体系结构的应用程序,因为该向导保证正确的 MFC 体系结构。 但是,如果必须避免使用向导,以下是在代码中绕过文档/视图体系结构的几种方法:
将文档视为未使用的追加,并在视图类中实现数据管理代码,如上所述。 文档的开销相对较低。 单个 CDocument 对象本身会产生少量的开销,以及基类、CCmdTarget 和 CObject 的小
CDocument
开销。 后两类都很小。在以下文件中
CDocument
声明:两个
CString
对象。三 个 BOOLs.
一个
CDocTemplate
指针。一个
CPtrList
对象,其中包含文档视图的列表。
此外,文档需要创建文档对象、其视图对象、框架窗口和文档模板对象所需的时间。
将文档和视图视为未使用的追加项。 将数据管理和绘图代码放在框架窗口中,而不是视图。 此方法更接近 C 语言编程语言模型。
重写创建文档和视图以消除创建文档的 MFC 框架的各个部分。 文档创建过程从调用
CWinApp::AddDocTemplate
开始。 消除从应用程序类InitInstance
的成员函数进行调用,而是自行创建框架窗口InitInstance
。 将数据管理代码置于框架窗口类中。 文档/视图创建过程在 文档/视图创建中演示。 这是更多的工作,需要更深入地了解框架,但它可以完全释放文档/视图开销。
MFC:在数据库应用程序中使用无文档和视图的数据库类提供了文档/视图替代项的更具体示例。