Сохранить и восстановить позицию Aero Snap в Windows 7

Допустим, у меня есть окно, и я хочу сохранить его положение, когда оно закрывается, и восстановить его, когда оно снова открывается. Типичный способ сделать это - вызвать GetWindowPlacement / SetWindowPlacement. Это заботится о том, чтобы запомнить положение и максимально / минимизированное состояние.

В Windows 7 вы можете закрепить окно сбоку экрана с помощью функции "Aero Snap". Мой вопрос заключается в том, как сохранить и восстановить окна, которые были "Snapped", чтобы вы могли восстановить состояние "Snap". GetWindowPlacement / SetWindowPlacement не решает эту проблему (насколько мне известно), и я не видел ни одного "Snap" API в Windows 7.

Здесь есть похожий вопрос: " Как определить размер окна был изменен Windows7, но в этом случае кажется, что OP просто хотел положение восстановления, а не состояние" Snap ".

2 ответа

Обходной путь должен позвонить GetWindowRect() чтобы получить фактические координаты окна и скопировать их по плохим координатам в WINDOWPLACEMENT::rcNormalPosition,

Я решил это переопределить CWinAppEx::SaveState, чтобы обновить WINDOWPLACEMENT перед его сохранением:

      BOOL MyApp:SaveState(LPCTSTR lpszSectionName, CFrameImpl *pFrameImpl)
{
  WINDOWPLACEMENT wp;
  wp.length = sizeof(WINDOWPLACEMENT);
  m_pMainWnd->GetWindowPlacement(&wp);
  if (wp.showCmd == SW_SHOWNORMAL)
  {
    m_pMainWnd->GetWindowRect(&wp.rcNormalPosition);
    m_pMainWnd->SetWindowPlacement(&wp);
  }

  return __super::SaveState(lpszSectionName, pFrameImpl);
}
Другие вопросы по тегам