首页 > 解决方案 > 关于 GetWindowPlacement 返回数据的问题

问题描述

我有点不确定调用 GetWindowPlacement() 函数的某些返回值的含义,所以我希望得到您的帮助。

我将调用它来获取隐藏窗口的正常尺寸。

首先,showCmd 字段的值从何而来?在返回结构(WINDOWPLACEMENT 结构)的 Microsoft 文档中,所有可能值的描述都使用动词/动作词;例如,“SW_MAXIMIZE:最大化指定窗口”或“SW_SHOWNOACTIVATE:以最近的大小和位置显示窗口。”

我想在不先取消隐藏/恢复它的情况下获得隐藏窗口的尺寸,所以对于动词,我似乎必须在调用 GetWindowPlacement 之前调用 SetWindowPlacement() 并将 showCmd 设置为 SW_SHOWNOACTIVATE。那是对的吗?

那么我是否正确理解该字段获取其各种值的主要(也许是唯一)方式是通过在某处显式调用 SetWindowPlacement() ?

我的第二个问题与 rcNormalPosition 返回值有关。这些数据是否包括窗户装饰,还是客户价值?

感谢您的时间!

标签: winapiwindow-position

解决方案


showCmdstruct成员的含义WINDOWPLACEMENT有点混乱,因为 Win32 正在SW_*重用ShowWindow().

幸运的是,函数的含义记录在案GetWindowPlacement()

如果由 hWnd 参数标识的窗口最大化,则 showCmd 成员为 SW_SHOWMAXIMIZED。如果窗口被最小化,showCmd 是 SW_SHOWMINIMIZED。否则,它是 SW_SHOWNORMAL。

因此,根据返回的这 3 个值中的哪一个,您可以判断窗口当前是最大化、最小化还是正常(恢复)。如果你想知道正常的位置是什么,你可以使用rcNormalPosition会员。你根本不需要打电话SetWindowPlacement()

但是,请注意GetWindowPlacement()返回工作区坐标而不是屏幕坐标的警告,屏幕坐标因任务栏位置和大小而异。GetWindowPlacement()如果您只使用to call返回的坐标,这不是问题SetWindowPlacement()。否则,您可能必须找到一种将工作区坐标转换为屏幕坐标的方法。


推荐阅读