同时显示同一文档的多个视图

2024-02-26

如何说服 MFC 文档/视图体系结构让我同时显示同一文档的两个不同视图?

例如,说我的CDocument子类代表某种描述的档案。
我想要一个用户界面,其中该存档中的所有条目的名称都显示在CListView子类显示在左侧窗格中,而当前所选条目的详细信息显示在CEditView右侧窗格中的子类。

The CSingleDocTemplate似乎只允许连接一个文档、一个框架和一个视图。我仍然想要一个 SDI 应用程序,但我想要一个文档和两个不同的视图 - 这不是良好的文档/视图架构的全部要点吗?


SDI 意思是“单Document界面”,它限制您一次只能查看一个文档,但不限制您可以为此文档打开的视图数量。

在 SDI 应用程序中打开多个视图的最常见方法可能是分光窗.

您将一个视图添加到CSingleDocTemplate(哪一个并不重要)

pDocTemplate = new CSingleDocTemplate(
    IDR_MYRESOURCEID,
    RUNTIME_CLASS(CMyDoc),
    RUNTIME_CLASS(CMyFrameWnd),
    RUNTIME_CLASS(CMyListView));

你的框架窗口得到一个实例CSplitterWnd m_wndSplitter并且你超载了OnCreateClient虚函数:

BOOL CMyFrameWnd::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
    VERIFY(m_wndSplitter.CreateStatic(this,1,2)); // one row / two columns

    VERIFY(m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyListView),
        CSize(300,300),pContext));
    VERIFY(m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMyEditView),
        CSize(300,300),pContext));

    return TRUE;
}

此示例创建一个具有一行和两列的分割窗口。拆分器的左侧是类型视图CMyListView右侧是类型视图CMyEditView.

您甚至可以将多个拆分器窗口相互嵌套,以在框架窗口中创建任意复杂的视图集合。

这是一个小教程,展示了如何在 SDI 应用程序中使用分割器窗口:

http://www.codeproject.com/KB/splitter/splitterwindowtutorial.aspx http://www.codeproject.com/KB/splitter/splitterwindowtutorial.aspx

Edit

MFC 在内部将添加到拆分器的视图与文档连接起来:CCreateContext* pContext它被传递到OnCreateClient包含参考m_pCurrentDoc到当前文档(Framewindow 知道这个文档)。 MFC 在中使用它CView::OnCreate(ViewCore.cpp) 将视图添加到文档中:m_pCurrentDoc->AddView(this)并设置文档指针m_pDocument在视图中。

因此后续的调用UpdateAllViews您的文档将同时处理这两种视图。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同时显示同一文档的多个视图 的相关文章

随机推荐

  • 我目前面临一些订单重复问题 在没有详细说明的情况下 我对以下内容有疑问 这是否有可能触发两次提交
  • 连接到 LAN 时无法运行 selenium 脚本

    连接到 LAN 时无法运行 selenium 脚本 但连接到 WIFI 时它可以正常工作 我将所有代理设置保持不变 下面是代码 String exePath usr local bin chromedriver System setProp
  • 将选定的数据从第 1 帧中的 jtable 复制到第 2 帧中的另一个表

    我在frame1中有一个JTable2 在frame2中有一个JTable1 我想将选定的数据从 table2 复制并发送到 table1 我该怎么做 private void jButton3MouseClicked java awt e
  • SSRS 2008:如何在新页面上重复表格标题的一行

    我有一个包含 3 行标题的表格 我需要在新页面上重复第二行 除了第一页之外 页面中不需要第一行和第三行 如果我仅在第二行中设置属性 RepeatOnNewPage SSRS 将显示错误 TablixMember 必须具有与动态 Tablix
  • css动画持久结束状态

    我有一个 div 元素 它充当我的网页的全局容器 我在其中也有一个 div 元素 我将其用作窗帘 即当它被激活时 它会在黑暗的半透明层中覆盖整个页面 就像灯箱一样 因此该页面基本上已停用 并且可以在顶部显示警告对话框或图片框等 我可以使用j
  • 将特定的MDC字段附加到logstash日志中

    我正在尝试将自定义字段添加到 logback spring xml 中的 Logstash Appender 中 如下所示
  • Mongoose 填充包含 ref 的对象数组

    我有一个带有数组的猫鼬模式lists由对另一个集合的引用和嵌套的数字数组组成的对象 var Schema exports mongoose schema mongoose require mongoose Schema mongoose S
  • 构造函数注入——我们也注入工厂吗?

    听完后整洁代码讲座 https www youtube com playlist list PL693EFD059797C21E 我开始明白我们应该使用工厂来组合对象 因此 举例来说 如果House has a Door and a Doo
  • Camel 中的无限循环 - Rabbitmq

    我有一个小型服务器路由 它从queue in 获取消息并放入queue out 当我输入一条消息时queue in 服务器无限循环运行 我想知道我在配置方面缺少什么 这看起来是一条非常简单的路线 小服务器路由
  • IntelliJ 找不到 Scanner 类 [重复]

    这个问题在这里已经有答案了 我正在使用 Intellij IDEA 这是我的代码 public static void main String args java util Scanner scanner new java util Sca
  • 如何在Python中使用多线程时获得更快的速度

    现在我正在研究如何尽快从网站获取数据 为了获得更快的速度 我正在考虑使用多线程 这是我用来测试多线程和简单帖子之间差异的代码 import threading import time import urllib import urllib2
  • 如何在 Firefox 3.0 的 Javascript 中调用 Web 服务

    我在使用 Firefox 调用 Net Web 服务时遇到问题 客户 一个简单的例子对我来说就足够了 服务器端代码是这样的 WebService Namespace http tempuri org WebServiceBinding Co
  • 下一个可用记录 ID

    user User new user id返回零 但我需要在保存之前知道它 是否可以 是的你可以 我有同样的问题并调查了文档 能否解决这个问题其实和你的数据库类型有很大关系 Oracle and PostgreSQL确实有有用的功能可以轻松
  • RSA-OAEP SHA-512 加密/解密从 Javascriptwebcrypt api 到 PHP openssl?

    我一直忙于尝试使用 webcrypto api 和使用 openssl 的 PHP 服务器在浏览器客户端之间建立安全交换 我已经尽可能地分解了 事情 我编写了一些 javascript 来生成密钥对 打印出私有值和公共值 加密一个简单的字符
  • 过滤所有查询(试图实现软删除)

    我正在尝试在 EF Core 2 0 中实现软删除行为 public interface ISoftDeleteModel bool IsDeleted get set 创建正确的列和软删除工作正常 但从 DbContext 过滤实体则不然
  • 为什么从 iPhone 模拟器发送文件到 watchOS2 模拟器不起作用?

    我试图将数据库从 iOS 9 iPhone 复制到 watchOS 2 Apple Watch 两个模拟器 但什么也没有 找不到文件 到处搜查 我想在从 iPhone 输入应用程序到 Apple Watch 时传输数据库 即使仅 iPhon
  • 如何设置目录分隔符以匹配操作系统?

    我正在编写一个 qt 应用程序 目标是可移植到 3 个主要操作系统 我正在使用 QFileDialog 选择一个文件夹 然后将其添加到 QListWidget 中 然而 即使我在 Windows 上 文件夹名称也会返回为 E media 我
  • Java Toolkit 屏幕分辨率降低

    我正在使用 java 来获取屏幕的尺寸和分辨率 当我运行以下代码时 我得到以下输出 Toolkit toolkit Toolkit getDefaultToolkit Dimension dim toolkit getScreenSize
  • 在 ubuntu 上的 R 中使用 cairo 设备时出错

    我正在开罗设备上工作 我正在生成 cairo pdf 并收到如下所示的错误消息 cairo pdf DATA Warning messages 1 In cairo pdf DATA unable to load shared object
  • 同时显示同一文档的多个视图

    如何说服 MFC 文档 视图体系结构让我同时显示同一文档的两个不同视图 例如 说我的CDocument子类代表某种描述的档案 我想要一个用户界面 其中该存档中的所有条目的名称都显示在CListView子类显示在左侧窗格中 而当前所选条目的详