获取最小化窗口的大小

问题描述 投票:0回答:2

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

默认情况下,系统会减少 将窗口最小化到其大小 任务栏按钮并移动最小化 窗口到任务栏。一个恢复的 window 是一个已经存在的窗口 返回到之前的大小并且 位置,即它的大小 在最小化或最大化之前。

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

winapi
2个回答
12
投票

如何使用

GetWindowPlacement
这将返回一个
WINDOWPLACEMENT
结构
,其中包含有关窗口在恢复位置的坐标的信息。

请记住(正如 Leo Davidson 在评论中指出的那样)您必须尊重工作区和屏幕坐标之间的差异。正如

WINDOWPLACEMENT
文档所述:

a中使用的坐标 WINDOWPLACMENT 结构应该是 仅由 GetWindowPlacement 使用 和 SetWindowPlacement 函数。 将工作空间坐标传递给 需要屏幕的功能 坐标(如SetWindowPos) 将导致窗口出现在 位置错误。例如,如果 任务栏位于顶部 screen,保存窗口坐标 使用 GetWindowPlacement 并恢复 他们使用 SetWindowPos 会导致 窗口似乎“爬行” 屏幕。

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


至于解释为什么窗口在最小化时会改变其大小,有关该主题的 [Raymond Chen 的博客文章][3](以及链接的文章)是必读内容。它们并没有真正更改任务栏按钮的大小,而是更改为预定义的 160x31 大小。他解释说,您可以通过将 MDI 子窗口最小化到其父窗口中来看到这一点 - 这实际上是它的大小。

1
投票

处理WM_SIZE消息。如果 wParam 不是 SIZE_MAXIMIZED 或 SIZE_MINIMIZED,则在某些变量中保留窗口大小和位置。当窗口关闭时使用这些变量。

© www.soinside.com 2019 - 2024. All rights reserved.