我从来不知道这一点,但显然:
默认情况下,系统会减少 将窗口最小化到其大小 任务栏按钮并移动最小化 窗口到任务栏。一个恢复的 window 是一个已经存在的窗口 返回到之前的大小并且 位置,即它的大小 在最小化或最大化之前。
在应用程序中,我们希望在退出时保存各个窗口的位置/大小。这会导致最小化窗口的问题。我们的解决方案是在运行保存状态逻辑之前恢复所有窗口,但这看起来很糟糕。有更好的办法吗?
GetWindowPlacement
?
这将返回一个 WINDOWPLACEMENT
结构,其中包含有关窗口在恢复位置的坐标的信息。
请记住(正如 Leo Davidson 在评论中指出的那样)您必须尊重工作区和屏幕坐标之间的差异。正如
WINDOWPLACEMENT
文档所述:
a中使用的坐标 WINDOWPLACMENT 结构应该是 仅由 GetWindowPlacement 使用 和 SetWindowPlacement 函数。 将工作空间坐标传递给 需要屏幕的功能 坐标(如SetWindowPos) 将导致窗口出现在 位置错误。例如,如果 任务栏位于顶部 screen,保存窗口坐标 使用 GetWindowPlacement 并恢复 他们使用 SetWindowPos 会导致 窗口似乎“爬行” 屏幕。
或者,我之前无疑使用过的更简单的解决方案只是在保存状态之前检查窗口是否最小化,如果是,则跳过保存任何状态信息。
处理WM_SIZE消息。如果 wParam 不是 SIZE_MAXIMIZED 或 SIZE_MINIMIZED,则在某些变量中保留窗口大小和位置。当窗口关闭时使用这些变量。