【发布时间】:2011-08-06 02:32:22
【问题描述】:
如何确定窗口是否使用Aero Snap feature 调整了大小? GetWindowPlacement 函数给出了最新的“恢复”窗口大小。我使用它如下:
WINDOWPLACEMENT wp = {};
wp.length = sizeof(WINDOWPLACEMENT);
::GetWindowPlacement( hWnd, &wp );
例如,它给出wp.rcNormalPosition = {top=208 bottom=520 left=152 right=510},它应该是
{top=0 bottom=1920 left=152 right=510}.
请注意,这是我的错,GetWindowRect 给出了完全相同的错误结果。GetWindowRect 给出了正确的结果。
我需要在程序退出时保存窗口状态并在启动时加载它,所以我需要知道窗口是如何放置的。如何找出实际的窗口坐标?
嗯,我用notepad.exe(和一些其他标准的Windows 组件)做了几个测试,它以同样的方式保存它的状态——它不记得它是否被“捕捉”了。所以我想这是 Windows 程序的预期行为。
【问题讨论】:
-
GetClientRect提供了什么?如果客户端大小大于窗口大小,那就是有问题的线索。DWMWA_EXTENDED_FRAME_BOUNDS怎么样?GetWindowRectcmets 中提到它有助于获取 Aero 窗口的边界? -
看起来可能是GetWindowRect too small on Windows 7的骗子
-
@ben 我的经验是 GetWindowRect 返回正确的值,但 GetWindowPlacement 是有问题的。
标签: c++ windows winapi windows-7 aero-snap