【发布时间】:2011-02-04 02:45:40
【问题描述】:
我正在使用SetWindowPos 和MoveWindow 调整窗口大小和居中。它工作正常,但在 Windows Media Player 或控制面板等多个窗口上,当您关闭窗口并再次打开它时,不会反映新的调整大小/移动。当我手动调整大小时,更改会在我下次打开窗口时反映出来。即使我打电话给UpdateWindow,这些变化也不会反映出来。我需要发送窗口以保存更改吗? RedrawWindow 有帮助吗?谢谢?
【问题讨论】:
-
问题是那些 API 显式设置了窗口大小(我不确定目标应用程序甚至接收到一个事件 - 但我可能是错的),所以在内部没有设置窗口大小当窗口未最小化时被应用程序“记住”。我不知道如何解决这个问题,但我会研究一下 SendMessage API 之类的东西。
-
有趣的是,当我以编程方式调整大小时,我手动将鼠标悬停在窗口边缘,直到获得调整大小的鼠标光标,然后我只需向下和向上单击(而不是单击和拖动),然后关闭窗口,以编程方式设置的新大小被保存。不知何故,我需要向窗口发送一些消息,与手动调整大小时发送的消息相同。
-
您是否尝试过 Spy++ 来查看执行此操作时会触发什么事件?
-
当你使用
SetWindowPos函数时,目标窗口实际上会收到一个带有更新参数的WM_WINDOWPOSCHANGINGmessage。这就是它首先移动的原因。您可以使用 Spy++ 看到这一点。但这仍然不能解决您的问题;详情见我的回答。
标签: c# .net windows winapi window-position