在Windows 7上保存和恢复Aero Snap位置

Mau*_*gan 11 winapi windows-7 aero-snap

假设我有一个窗口,我想在窗口关闭时保存它的位置,并在窗口再次打开时恢复它.执行此操作的典型方法是调用GetWindowPlacement/SetWindowPlacement.这需要记住位置和最大化/最小化状态.

在Windows 7上,您可以使用"Aero Snap"功能将窗口停靠在屏幕的一侧.我的问题是如何保存和恢复已被"捕捉"的窗口,以便您可以恢复"快照"状态.GetWindowPlacement/SetWindowPlacement没有解决这个问题(据我所知),我还没有在Windows 7中看到任何"Snap"API.

这里有一个类似的问题 如何检测窗口是否被Windows7调整大小,但在这种情况下,似乎OP只是想要恢复位置,而不是"Snap"状态.

Chr*_*ney 5

解决方法是调用GetWindowRect()以获取实际的窗口坐标并将其复制到错误的坐标中WINDOWPLACEMENT::rcNormalPosition.

  • 问题在于`GetWindowRect` 使用屏幕坐标,而GetWindowPlacement 使用工作区坐标。 (3认同)
  • `if(SW_NORMAL == wp.showCmd) GetWindowRect(&wp.rcNormalPosition);` (2认同)