我正在使用SetWindowPlacement函数可以 (1) 最大化和 (2) 更改外部窗口在桌面上的还原位置。但是当我在WinForm窗口上使用这个命令时,它似乎没有正确设置恢复位置。 (我正在测试的 WinForm 窗口只是一个无需修改即可运行的 VS2008 WinForms 应用程序。)因此,例如,如果窗口处于位于 (0, 0) 的恢复状态并且我使用SetWindowPlacement
将其最大化并将其恢复位置设置为(100,100),然后单击窗口的恢复按钮,它将恢复到(0,0)而不是(100,100)。实际上,窗口似乎首先恢复到我设置的位置,然后移回到以编程方式操作之前的最后恢复位置。我很困惑为什么这种情况只会发生在 WinForm 窗口上 - 我尝试此操作的每个非 WinForm 窗口都会正确恢复到我指示的位置SetWindowPlacement
.
我知道这没什么可继续的,但我想知道这里是否有人对为什么会发生这种情况有任何想法。谢谢。
是的,这是设计使然。 Form 类会跟踪恢复边界本身,这是必要的,以便在重新创建窗口后可以正确地重新定位窗口。 Windows 窗体通常会即时重新创建窗口,以实现只能由 CreateWindowEx() 指定的属性的属性设置器。就像在任务栏中显示一样。
私有的 RestoreWindowBoundsIfNecessary() 方法将窗口放回去,它将在窗口恢复时运行。据我所知,恢复边界在窗口最小化或最大化之前被锁定。如果您想在窗口最小/最大化时修改恢复位置,那么您必须使用 MoveWindow 将其移动到您想要的位置after恢复窗口。应该会产生一些闪烁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)