我写了一个MDI应用程序,其中包含许多不同的子表单。假设用户创建了三个子表单:第一个表单的左上角位于屏幕坐标0,0;第二种形式被拖动到屏幕的右侧(坐标100,300),第三种形式出现在坐标20,20处。如果我使用主窗体的cascade命令,那么第二个窗体将移动到10,10。
我希望第二种形式保持原状并让第三种形式移动到10,10(即级联顺序的第二位)。有没有办法从主窗体的“Cascade”命令中排除特定的MDI子窗体?
答案 0 :(得分:3)
无法通过向MDI容器窗口Cascade
发送WM_MDICASCADE
消息来影响ClientHandle
方法的行为。
现在,查看WM_MDICASCADE
它可以选择跳过已禁用的MDI子级级联。因此,您可以禁用某些子窗口,自己发送WM_MDICASCADE
消息,然后重新启用子窗口。我没有尝试这样做,但似乎我很可能会这样做。
您的另一个选择是实现您自己的MDI子定位方法。这实际上相对容易做到。我建议您查阅Wine项目的源代码,以了解如何执行此操作。密钥文件是mdi.c
DLL中的user32
。