delphi - 从级联中排除某些 MDI 子窗口

标签 delphi mdi

我编写了一个包含许多子表单的 MDI 应用程序,每个子表单都不同。假设用户创建了三个子窗体:第一个窗体的左上角位于屏幕坐标 0,0 处;第一个窗体的左上角位于屏幕坐标 0,0 处;第一个窗体的左上角位于屏幕坐标 0,0 处;第二个表单已被拖动到屏幕的右侧(坐标 100, 300),第三个表单出现在坐标 20,20 处。如果我使用主窗体的级联命令,那么第二个窗体将移动到 10,10。

我希望第二个表单保持在原来的位置,并使第三个表单移动到 10、10(即级联顺序的第二位)。有没有办法从主窗体的“级联”命令中排除特定的 MDI 子窗体?

最佳答案

无法影响通过发送 WM_MDICASCADE 实现的 Cascade 方法的行为。发送至 MDI 容器窗口 ClientHandle 的消息。

现在,看看WM_MDICASCADE,它有一个选项可以跳过级联中禁用的 MDI 子项。因此,您可以禁用某些子窗口,自己发送 WM_MDICASCADE 消息,然后重新启用子窗口。我没有尝试这样做,但在我看来它很可能会起作用。

您的另一个选择是实现您自己的 MDI 子定位方法。这实际上是比较容易做到的。我建议您查阅 Wine 的源代码项目来了解如何做到这一点。关键文件是 user32 DLL 中的 mdi.c

关于delphi - 从级联中排除某些 MDI 子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445420/

相关文章:

windows - 将数据库信息获取到程序的最佳方式(windows 和 mac)

c++ - 我们可以在 MDI 应用程序的 View 中创建 ListCtrl 还是我们总是需要绘制它?

c# - 在 MDI 应用程序的父窗体中心打开模态窗口

delphi - delphi 5 中未找到 strutils.dcu

delphi - 如何使用 VCL 类的接口(interface) - 第 2 部分

windows - 如何检测连接的 USB 打印机是打开还是关闭?

vue.js - 如何更新 vuetify mdi 图标? (Nuxt.js)

delphi - 为什么我需要指定 Canvas 的字体来更改 Delphi 2009 中的字体大小?

vb.net - 避免打开重复的 mdi 子项

c++ - 保存工作区 MFC C++ MDI