获得最小化窗口的大小

Mr.*_*Boy 2 winapi

我从来不知道这一点,但显然:

默认情况下,系统会将最小化窗口缩小到其任务栏按钮的大小,并将最小化窗口移动到任务栏.已恢复的窗口是已返回其先前大小和位置的窗口,即在最小化或最大化之前的大小.

在应用程序中,我们希望在退出时保存各种窗口的位置/大小.这导致最小化窗口的问题.我们的解决方案是在运行保存状态逻辑之前恢复所有窗口,但这看起来很糟糕.有没有更好的办法?

Cod*_*ray 9

怎么用GetWindowPlacement 返回一个WINDOWPLACEMENT结构,其中包含有关恢复位置中窗口坐标的信息.

请记住(正如Leo Davidson在评论中指出的那样)您必须尊重工作空间和屏幕坐标之间的差异.正如WINDOWPLACEMENT文档所述:

WINDOWPLACEMENT结构中使用的坐标只能由GetWindowPlacement和SetWindowPlacement函数使用.将工作空间坐标传递给期望屏幕坐标(例如SetWindowPos)的函数将导致窗口出现在错误的位置.例如,如果任务栏位于屏幕顶部,则使用GetWindowPlacement保存窗口坐标并使用SetWindowPos恢复它们会导致窗口显示为"爬行"屏幕.

或者,我之前毫无疑问使用的更简单的解决方案是在保存状态之前检查窗口是否最小化,如果是,则跳过保存任何状态信息.


至于解释为什么窗口在最小化时会改变其大小,Raymond Chen的博客条目(以及链接的条目)也是必读的.它们并没有真正更改为任务栏按钮的大小,而是更改为预定义的160x31大小.他解释说,你可以通过将MDI子窗口最小化到其父级来看到这一点 - 这实际上是它的大小.