如何确定窗口是否使用
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程序的预期行为.
解决方法
AeroSnap只是窗口管理器发送给您的应用程序的另一种调整大小.因此,您不会知道它是快照而不是任何其他类型的调整大小.
您可以期待的最好的方法是检测在尺寸事件过程中已移动的相对边缘.您需要检查高度或宽度是否已更改为以便将其与移动事件区分开来.
您之所以没有被告知这是一个突发事件的原因是很难想象为什么应用程序会关心调整大小的机制是什么.
评论更多地揭示了您的问题.您正在尝试在应用关闭时保留应用的位置和大小,以便在重新启动时恢复它.您正在使用GetWindowPlacement()执行此操作,并且发现当最后一次调整Window的大小是Aero Snap时,它返回的位置不正确.
我自己的应用程序完全相同,我遇到了完全相同的问题.我使用的解决方案是调用GetWindowRect()代替GetWindowPlacement()来获取窗口位置和大小.你声明这对你失败了,在这种情况下我不知道该建议什么.我必须说我觉得有点难以相信GetWindowRect()没有返回正确的窗口rect.