我编写了一个包含许多子表单的 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/