winapi - 关于 GetWindowPlacement 返回数据的问题
问题描述
我有点不确定调用 GetWindowPlacement() 函数的某些返回值的含义,所以我希望得到您的帮助。
我将调用它来获取隐藏窗口的正常尺寸。
首先,showCmd 字段的值从何而来?在返回结构(WINDOWPLACEMENT 结构)的 Microsoft 文档中,所有可能值的描述都使用动词/动作词;例如,“SW_MAXIMIZE:最大化指定窗口”或“SW_SHOWNOACTIVATE:以最近的大小和位置显示窗口。”
我想在不先取消隐藏/恢复它的情况下获得隐藏窗口的尺寸,所以对于动词,我似乎必须在调用 GetWindowPlacement 之前调用 SetWindowPlacement() 并将 showCmd 设置为 SW_SHOWNOACTIVATE。那是对的吗?
那么我是否正确理解该字段获取其各种值的主要(也许是唯一)方式是通过在某处显式调用 SetWindowPlacement() ?
我的第二个问题与 rcNormalPosition 返回值有关。这些数据是否包括窗户装饰,还是客户价值?
感谢您的时间!
解决方案
showCmd
struct成员的含义WINDOWPLACEMENT
有点混乱,因为 Win32 正在SW_*
重用ShowWindow()
.
幸运的是,函数的含义记录在案GetWindowPlacement()
。
如果由 hWnd 参数标识的窗口最大化,则 showCmd 成员为 SW_SHOWMAXIMIZED。如果窗口被最小化,showCmd 是 SW_SHOWMINIMIZED。否则,它是 SW_SHOWNORMAL。
因此,根据返回的这 3 个值中的哪一个,您可以判断窗口当前是最大化、最小化还是正常(恢复)。如果你想知道正常的位置是什么,你可以使用rcNormalPosition
会员。你根本不需要打电话SetWindowPlacement()
。
但是,请注意GetWindowPlacement()
返回工作区坐标而不是屏幕坐标的警告,屏幕坐标因任务栏位置和大小而异。GetWindowPlacement()
如果您只使用to call返回的坐标,这不是问题SetWindowPlacement()
。否则,您可能必须找到一种将工作区坐标转换为屏幕坐标的方法。
推荐阅读
- c - 3D空间OpenGL(C)中的弯曲圆柱体
- javascript - CrashLoopBackOff 运行循环:Docker 和 GraphQl 警告不健康连接被拒绝
- orchardcms - 果园核心级联删除
- javascript - 通过数组获取的正确方法
- c# - 如何在 Roslyn 中使用项目方法?
- flask - 无法在烧瓶中使用 request.args
- eclipse - JAX-RS 完全没有响应 (404)
- javascript - 如何使用 TypeScript 中的对象解构为构造函数中的类级别属性赋值?
- maxima - Maxima:类似于 Excel 中的圆形
- android - 一旦我开始做广告,我的 android BLE 设备会在多长时间内做广告?有没有办法增加持续时间?