首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 自動隱藏停泊視窗增強版:修正閃爍、焦點切換、滑入動畫 (基於 CSizingControlBar)

     編輯:VC 教學

專案背景

基於 Cristi Posea `CSizingControlBar` 重用 MFC Dock 架構,實現 VS.NET 風格自動隱藏停泊視窗。本版本在《輕鬆實現類 MSDN2002 界面 (二)》基礎上修正多項 Bug 並新增功能。

主要修正

問題解決方案
兩個自動隱藏視窗同時顯示引入 `TID_AUTO_HIDE_DELAY` 計時器序列化顯示
焦點在浮動視窗與停泊頁籤間切換異常重寫焦點處理邏輯,確保 `SetFocus` 正確傳遞
調整停泊視窗大小閃爍/抖動優化 `OnNcCalcSize`/`OnNcPaint` 減少無效重繪
自動隱藏視窗尺寸超出主框架限制 `AHFloatWnd` 最大尺寸不超過框架客戶區
靜態 MFC 連結 (Release/Debug) 繪製異常新增 `STATIC_MFC_LINK` 編譯選項區分處理
加載 `WS_POPUP` 對話框導致視窗管理混亂`CDockPageBar::AddPage` 檢查 `pWnd` 必須為 `WS_CHILD`

新增功能

  • **滑入/滑出動畫** (`SLIDE_IN`/`SLIDE_OUT`):使用 `AnimateWindow` 或自繪計時器實現平滑展開收合。
  • **精確停泊算法**:模仿 VS.NET 精確對齊邊緣,雖橫向停泊優先填滿剩餘空間問題仍存 (CSizingControlBar 固有限制)。
  • **非客戶區重繪**:標籤與標題列移至 `OnNcPaint`/`OnNcCalcSize` 繪製,視覺效果更銳利。
  • **MDI 支援**:`CMainFrame` 繼承 `CMDIAutoHideFrame`,範例含 SDI/MDI 雙專案。

使用方法

  1. 包含標頭、連結庫 (或直接加入源碼)。
  2. SDI:`CMainFrame` 繼承 `CAutoHideFrame`;MDI:繼承 `CMDIAutoHideFrame`。
  3. 建立 `CDockPageBar`,`AddPage(pChildWnd, "標題", iconIndex)`。
  4. 啟用靜態 MFC 時在專案設定加入 `STATIC_MFC_LINK` 宏。

已知遺留問題

  1. 橫向停泊視窗優先佔滿剩餘寬度 (需重寫 `CSizingControlBar` 佈局邏輯)。
  2. 若框架含可停泊 ToolBar,自動隱藏浮動視窗可能遮蓋 ToolBar (Z-order 處理待優化)。

範例截圖

MDI 停泊視窗

MDI 自動隱藏視窗

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved