有关 GetWindowPlacement 返回数据的问题

Amb*_*131 2 winapi window-position

我有点不确定调用 GetWindowPlacement() 函数的一些返回值的含义,所以我需要您的帮助。

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

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

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

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

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

感谢您的时间!

Sea*_*ine 5

showCmd结构体成员的含义WINDOWPLACEMENT有点令人困惑,因为 Win32 正在SW_*重用ShowWindow().

幸运的是,其含义已记录在GetWindowPlacement()函数中。

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

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

GetWindowPlacement()但是,请注意返回工作区坐标而不是屏幕坐标的警告,后者根据任务栏位置和大小而有所不同。GetWindowPlacement()如果您仅使用调用返回的坐标,这不是问题SetWindowPlacement()。否则,您可能必须找到一种从工作空间转换为屏幕坐标的方法。