我从来不知道这一点,但显然:
默认情况下,系统会减少a 最小化窗口到它的大小 任务栏按钮并移动最小化 窗口到任务栏。恢复了 窗口是一个窗口 恢复到以前的大小和 位置,即它的大小 在最小化或最大化之前。
在应用程序中,我们希望在退出时保存各种窗口的位置/大小。这导致最小化窗口的问题。我们的解决方案是在运行保存状态逻辑之前恢复所有窗口,但这看起来很糟糕。还有更好的方法吗?
答案 0 :(得分:8)
如何使用GetWindowPlacement
?
返回WINDOWPLACEMENT
structure,其中包含有关恢复位置中窗口坐标的信息。
请记住(正如Leo Davidson在评论中指出的那样)您必须尊重工作空间和屏幕坐标之间的差异。正如WINDOWPLACEMENT
文档所述:
a中使用的坐标 应该是WINDOWPLACEMENT结构 仅由GetWindowPlacement使用 和SetWindowPlacement函数。 将工作空间坐标传递给 期待屏幕的功能 坐标(如SetWindowPos) 将导致窗口出现 错误的位置。例如,如果 任务栏位于顶部 屏幕,保存窗口坐标 使用GetWindowPlacement并恢复 他们使用SetWindowPos导致 窗口似乎“蠕动”了 屏幕。
或者,我之前毫无疑问使用的更简单的解决方案是在保存状态之前检查窗口是否最小化,如果是,则跳过保存任何状态信息。
至于解释为什么窗口在最小化时改变其大小,主题上的Raymond Chen's blog entry(以及链接的条目)是必读的。它们并没有真正更改为任务栏按钮的大小,而是更改为预定义的160x31大小。他解释说,你可以通过将MDI子窗口最小化到其父级来看到这一点 - 这实际上是它的大小。
答案 1 :(得分:1)
处理WM_SIZE消息。如果wParam不是SIZE_MAXIMIZED或SIZE_MINIMIZED,请保持窗口大小和位置在一些变量中。窗口关闭时使用这些变量。