Kir*_*sky 7 c++ windows winapi windows-7 aero-snap
如何使用Aero Snap功能查明窗口是否已调整大小?GetWindowPlacementfunction提供最新的"恢复"窗口大小.我用它如下:
WINDOWPLACEMENT wp = {};
wp.length = sizeof(WINDOWPLACEMENT);
::GetWindowPlacement( hWnd, &wp );
Run Code Online (Sandbox Code Playgroud)
例如,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()这样做,并且发现当最后一次调整窗口大小是Aero Snap时它返回的位置不正确.
我自己的应用程序完全相同,我遇到了完全相同的问题.我使用的解决方案是GetWindowRect()代替GetWindowPlacement()获取窗口位置和大小.你声明这对你失败了,在这种情况下我不知道该建议什么.我必须说我觉得有点难以相信GetWindowRect()没有返回正确的窗口矩形.