问题标签 [mdi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2066 浏览

c# - 带有空白子窗体的 mdi 上的内存泄漏

我创建了一个空白应用程序,其 mdi 父表单从菜单中打开了一个空白子表单。

当子窗体的父窗体设置为 mdi 时 - 系统似乎没有释放内存 - 因此出现泄漏。

未设置父窗体时,将删除子窗体。

有谁知道为什么可以解决这个明显的内存泄漏?

我一直在使用蚂蚁内存分析器。

鲍勃。

0 投票
1 回答
467 浏览

c++ - 如何在窗口菜单中显示可用窗口

我有一个 MFC MDI 应用程序,我最近从 VS2003 移植到 VS2008,同时从 Stingray Objective Studio 2006 v2 转移到 v10.1。在我的应用程序的早期版本中,如果我打开了多个视图,则窗口菜单将由可用视图的枚举列表填充,例如1 MyViewA2 MyViewB等...如果我有大量视图,我还将获得一个Windows...菜单选项,以允许我选择一个视图。这不再发生,这破坏了我的一些 GUI 级回归测试。我的猜测是这个功能是由 CMDIFrameWnd 或 SECMDIFrameWnd 实现的,但我在文档中找不到对它的引用。有谁知道我怎样才能恢复这个功能。

0 投票
1 回答
789 浏览

.net - MDI 应用程序最小化/恢复问题

好的,所以我有一个 VB .Net MDI 表单应用程序。

frmMain 是 IsMDIContainer 设置为 TRUE 的“父”表单。

我从 frmMain 加载“frmChild”,将 MDIparent 属性设置为 frmMain。

我最小化表单,然后最小化应用程序。几分钟后我恢复了应用程序,然后恢复了frmChild,发现frmChild现在完全是空白的……?

当我最小化子表单,然后最小化应用程序并随后恢复应用程序然后恢复子表单时,这种情况会间歇性发生......

0 投票
3 回答
4759 浏览

user-interface - GUI 设计 - 多表单 vs 模拟 MDI(选项卡) vs PageControl

您更喜欢以下哪种风格?

  • 执行任务的应用程序打开新表单
  • 将各种“表格”保存在不同选项卡中的应用程序
  • 一个基于 PageControl 的应用程序,它会根据您想要执行的操作向您显示正确的选项卡。
  • 别的东西

你也有关于 gui 设计的好链接吗?

0 投票
10 回答
15987 浏览

c# - MDI 父背景图片

我已经尝试了所有我能得到的东西,但它就是行不通!有没有人解决过这个问题?

我可以把我的图像放在后面,但它只有在表单从不尝试调整大小时才有效(缩小是可以的,生长会留下空白的灰色空间......)

0 投票
1 回答
1637 浏览

windows-7 - 在 Windows 7 下改变 MDI 子窗口的颜色

我有一个用 C++ 编写的 MDI 应用程序,在 Windows XP 下看起来很棒。所有 MDI 子窗口最终看起来都像它们的父窗口。好的。但是,在 Windows 7(可能还有 Vista)下,父窗口具有航空玻璃,而子窗口是这种可怕的不可更改的淡蓝色(与 Windows 7 Basic 主题相同)。所以我的应用程序看起来真的非常非常糟糕。

通过启动 Office 2003 并尝试查看 MDI 子窗口(可能在 Excel 中),您可以看到同样的丑陋行为。但是,Office 2007 实际上具有三种颜色主题——蓝色、银色和黑色。这些主题以某种方式传递到 Excel 中的 MDI 子窗口。

我不知道 Microsoft 在 Office 2007 中是如何做到这一点的。我很想知道其中的诀窍。我需要挂钩并接管我的 MDI 子窗口的绘图,并复制 Office 2007 团队已经完成的工作。问题是我想使用所有的 DrawTheme* 调用,所以我得到了正确绘制的渐变和圆角边缘和按钮。所有这些系统调用都需要一个主题句柄。但似乎不可能,例如,使用 SetWindowTheme 更改为使用来自另一个主题的配色方案。至少据我所知。

有人知道微软是如何做到这一点的吗?

0 投票
3 回答
3231 浏览

qt - 带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?

我有一个用 Qt 编写的MDI应用程序。一些子窗口包括QGLWidgets,即OpenGL 上下文。其中最突出的是使用 OpenGL 顶点和片段着色器来可视化他们的数据。

我需要以编程方式捕获应用程序主窗口的屏幕截图,当然包括所有碰巧可见的子窗口。起初听起来很容易(“肯定被问过很多次,所以让我们用谷歌搜索吧!”),但仔细观察后似乎有点棘手......

现在这是我到目前为止所尝试的:

  1. QPixmap::grabWidget不适用于使用着色器程序的子窗口,显然是因为重定向上下文似乎不支持必要的 OpenGL 扩展。(渲染代码检查关联的上下文是否支持所需的扩展,如果不支持则拒绝继续。)
  2. QPixmap::grabWindow默默地让所有 OpenGL 上下文为空——即使是那些只使用基本原语的上下文。
  3. QGLWidget::grabFrameBuffer有效,但仅捕获特定子窗口的 OpenGL 上下文,而我想获取整个应用程序(基本上是Alt+PrtScr在 Windows 中执行的操作)。

我还尝试先执行#2,然后为所有子窗口迭代#3,只需将#3 的结果复制到#2 中图像的正确位置。这工作得很好,直到我让一些子窗口重叠——在这种情况下,来自#3 的图像会覆盖子窗口框架等。所以这种方法可能需要更多的代码来处理所有令人讨厌的极端情况......

一些额外的背景:一旦我得到截图,我将把其中的几个放在一个序列中以创建一个视频——可能使用ffmpeg这使得这个问题成为我上一个问题(第一部分)的延续;只是该应用程序已从单上下文独立 OpenGL 程序演变为使用 Qt 进行整体窗口和 UI 小部件的东西,并将图形嵌入子窗口中。

虽然我当然更喜欢一个不错的 Qt-ish 跨平台解决方案,但我也愿意考虑使用 Windows 特定的 hack。(这应该是可能的,因为我可以看到Alt+PrtScr做非常正确的事情。)

那么,有什么建议吗?

0 投票
3 回答
5399 浏览

c# - MDI 窗口列表不更新子标题栏文本

我有一个 MDI 容器表单,以及一些独立更新其标题栏文本的子表单。在子窗体上更改 Text 属性后,在打开菜单时,不会在窗口列表菜单中更新来自子窗体的新标题栏文本。这是 .NET 通过 MdiWindowListItem 属性提供的自动生成的窗口列表。

仅当另一个事件以物理方式更改窗口列表(打开一个新子项、关闭一个子项、切换到另一个子项)时,更改才会传播。

有没有办法以编程方式强制更新窗口列表?我已经有一些代码可以在更改孩子的标题栏文本的同时进行菜单启用/禁用。

我尝试了以下但没有成功:

  • 主 MenuStrip 上的 Update()
  • 主 MenuStrip 上的 Refresh()
  • 窗口 MenuStrip 上的 Invalidate()
  • 在运行时对窗口列表项之一进行 Invalidate()
  • 在运行时在窗口列表项之一上切换两次检查状态

在菜单项、其父 ToolStrip 或包含菜单系统的父窗体上似乎没有任何其他远程可行的函数可以调用。

0 投票
1 回答
2557 浏览

c# - 获取跨线程操作在 MDIParent 中无效

可能重复:
跨线程操作无效

我正在尝试从另一个线程关闭表单的基础。我收到以下错误。

System.InvalidOperationException:跨线程操作无效:控件“MDIParent”从创建它的线程以外的线程访问。

对于以下行:

0 投票
4 回答
493 浏览

.net - 摆脱 MDI UI 的灵感

微软似乎希望我们停止使用 MDI,但如果更多的人像我一样,他们就会陷入过去的状态。Word 和 Excel 之类的软件在没有 MDI 的情况下很容易创建,但是在没有 MDI 的情况下我很难想出好的 UI。

有没有我和其他像我一样的人可以看到如何在不使用 MDI 的情况下制作出色的 WinForms UI 的示例。我不想就 MDI 的优缺点展开辩论,我只是希望有好的例子作为灵感。

编辑:我决定接受一个与问题无关的答案,因为它最终给了我关于如何进行的好主意。这可能不是问题的一般答案,但它确实帮助了我。也欢迎进一步的建议...... :)