MFC 中的文档视图体系结构

Posted

技术标签:

【中文标题】MFC 中的文档视图体系结构【英文标题】:Document-view architecture in MFC 【发布时间】:2014-01-07 11:38:27 【问题描述】:

我有一个关于使用 MFC 的内置文档视图架构的必要性的问题。我得到了一个旧的基于对话框的项目,我必须用一个框架替换主对话框并添加一个 ribon。它有一种文档视图架构,在没有内置类的情况下创建,我更愿意在新版本中重用它。但是,如果我试图绕过通常由项目向导生成的 CDoc 和 CView 派生类,我只能看到一个没有功能区的空窗口。那么......我真的必须实现这些内置的文档视图架构,还是我只是错过了一些东西?难道不能使用项目中已有的代码吗?

【问题讨论】:

将功能区与标准文档/视图一起使用不是强制性的。你有什么问题? 我的任务是添加一个功能区。我的问题是如何正确实现架构。如果我不使用文档和视图的内置类(这似乎与功能区无关:/),则窗口保持空白。另一方面,该程序处理大量数据,这些数据不存储在文件中。它是 COM 端口上的输入,所以我不太确定内置函数是否可以处理它:/ 我的意思是:从旧的 MFC 版本移植可能会很痛苦。为什么不创建一个新项目(使用功能区但不支持文档/视图)然后开始复制并粘贴到旧项目中?基类、定义等等…… 那是很多代码。它的负载:D 是的,但是您只需要更改几个类(当然,菜单/工具栏中的所有内容都必须移动到功能区...)。 AFAIK 对于这种移植没有简单的解决方案。 【参考方案1】:

如果您将在框架中使用多个视图和文档,那么建议使用现有框架的设计(CDocument、CView 等)。

如果您只为功能区执行此操作,并且只是将控件从对话框移动到框架,那么您可以跳过标准的文档/视图架构并直接实例化功能区控件。

如果您不必重新编写大量代码,那么我建议您使用标准的 Document/View 架构,因为从长远来看,这将节省大量时间,使您的应用程序可扩展至更大多文档设计等

【讨论】:

项目为 +1 GB :/ 可以使用 CDoc/CView 作为原始类/对象的非常薄的包装器。不要尝试“合并”而是“包装”。 嗯,我想我今天试一试。谢谢! 我可以将文档留空(类似于虚拟类)并使用旧文件代替它吗? 只有一个文档视图,在视图中使用对话框。基本上你会使用 CFormView。在该表单视图中,您可以使用您正在使用的现有对话模板。就是这样。您将所有对话框处理程序(按钮单击等)复制并粘贴到视图代码中,所有内容都将按原样工作。

以上是关于MFC 中的文档视图体系结构的主要内容,如果未能解决你的问题,请参考以下文章

MFC体系结构

MDI 应用程序 MFC 中文档的多个视图

MFC 中的非动态 Doc/View 架构使用

MFC Document/View结构

在文档/视图 MFC c++ 中没有视图的文档

MFC学习一 MFC基础类及其层次结构