基於 Cristi Posea 的 CSizingControlBar 與 Cuick 的《輕松實現類 MSDN2002 界面 (二)》,本專案大幅增強自動隱藏 (Auto-Hide) 停靠窗格功能,修正多項關鍵 Bug,新增滑入/滑出動畫、精確停靠演算法、MDI 支援,並重寫非客戶區繪製邏輯。
| # | 問題 | 解決方案 |
|---|---|---|
| 1 | 雙自動隱藏視窗同時顯示 | 引入 TID_AUTO_HIDE_DELAY 計時器序列化顯示邏輯。 |
| 2 | 焦點切換異常 (Auto-Hide 浮動視窗 ↔ 停靠欄) | 重寫焦點管理,明確處理 WM_KILLFOCUS/WM_SETFOCUS 流程。 |
| 3 | 調整停靠欄大小閃爍/顫動 | 優化 OnNcPaint/OnSize,減少無效區重疊。 |
| 4 | 自動隱藏視窗尺寸超出主框架 | OnSize 中加入邊界檢查 min(maxSize, frameClientRect)。 |
| 5 | 靜態 MFC 連結 (Release/Debug) 編譯錯誤 | 新增 STATIC_MFC_LINK 前置處理器定義切換連結模式。 |
| 6 | 加載 WS_POPUP 對話框導致視窗管理混亂 | CDockPageBar::AddPage 強制檢查 WS_CHILD 風格,拒絕非子視窗。 |
AnimateWindow 對自繪視窗無效),平滑度可調。CSizingControlBar 特性)。WM_NCPAINT/WM_NCCALCSIZE/WM_NCHITTEST/WM_NCLBUTTON*,視覺效果更銳利,減少客戶區重繪干擾。CDockAutoHideFrame (SDI) 或 CMDIAutoHideFrame (MDI),子視圖啟用時自動更新自動隱藏面板內容。
圖 1:MDI 架構下多停靠窗格 (輸出、錯誤清單、工具箱) 並存。
圖 2:MDI 自動隱藏模式,邊緣標籤頁點擊滑出。
DockAutoHide*.h/.cpp 核心檔案。CMainFrame 繼承 CDockAutoHideFrame;MDI:繼承 CMDIAutoHideFrame。CDockPageBar,覆寫 Create 建立內容視窗 (Tree/List/Edit 等)。OnCreate 中註冊頁面:m_dockBar.AddPage(RUNTIME_CLASS(CMyPage), _T("標題"), IDB_BITMAP)。m_dockBar.EnableAutoHide(TRUE)。STATIC_MFC_LINK。作者期待社群高手提供解決方案,共同完善這套免費的專業級停靠框架。