[英]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.