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

时间:2011-12-09 12:22:45

标签: delphi mdi

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

我希望第二种形式保持原状并让第三种形式移动到10,10(即级联顺序的第二位)。有没有办法从主窗体的“Cascade”命令中排除特定的MDI子窗体?

1 个答案:

答案 0 :(得分:3)

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

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

您的另一个选择是实现您自己的MDI子定位方法。这实际上相对容易做到。我建议您查阅Wine项目的源代码,以了解如何执行此操作。密钥文件是mdi.c DLL中的user32