簡體   English   中英

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

[英]Save and restore Aero Snap position on Windows 7

假設我有一個窗口,我想在窗口關閉時保存它的位置,並在窗口再次打開時恢復它。 執行此操作的典型方法是調用 GetWindowPlacement / SetWindowPlacement。 這需要記住位置和最大化/最小化狀態。

在 Windows 7 上,您可以使用“Aero Snap”功能將窗口停靠在屏幕一側。 我的問題是如何保存和恢復已“捕捉”的窗口,以便您可以恢復“捕捉”狀態。 GetWindowPlacement / SetWindowPlacement 沒有解決這個問題(據我所知),我在 Windows 7 中沒有看到任何“Snap”API。

這里有一個類似的問題How to detect window was resized by Windows7但在這種情況下,OP 似乎只是想要恢復位置,而不是“Snap”狀態。

解決方法是調用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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM