自動隱藏停泊窗體在商業的MFC圖形庫中(如Xtreme)已支持得很好,但他們大多都重寫了MFC相應的支持代碼
像Cristi Posea的CSizingControlBar實現VC6界面那樣,重用大部分MFC Dock 框架類而實現Vc .Net界面的免費庫很少見(偶沒發現:)
本實現,准確地說是在Cuick 的《輕松實現類MSDN2002界面(二)》基礎上的增強版。
其主要更新為:
Bugfixs:
1.增加定時器 TID_AUTO_HIDE_DELAY 避免出現兩個自動隱藏窗口(AHFloatWnds)同時顯示的問題.
2.focus 切換問題(特別是在 自動隱藏窗口(AHFloatwnd) 與 停泊窗體(DockPageBar)之間的切換).
3.在改變停泊窗體大小時會有的閃爍、顫動.
4.在改變自動窗體(AHFloatWnd)大小時,尺寸不能超出Mainframe.
5.static MFC 連接(Release & Debug)的問題(增加STATIC_MFC_LINK 編譯選項).
6.在CDockPageBar::AddPage 函數中檢驗 pWnd的 style,確保其為 WS_CHILD style,
避免由此引發的窗口管理混亂(如把一個WS_POPUP類型的對話框加載到停泊窗).
Improvements&Newfeatures:
1.增加自動隱藏窗口( AHFloatWnd) SLIDE_IN/SLIDE_OUT 動畫效果
(windows API ::AnimateWindow 對於自畫窗體好像不行)
2.增加的新的自動停泊算法,即 精確停泊(as in VC .net), 但是由於停泊窗體的類
是從Cristi Posea的CSizingControlBar繼承而來, 橫向停泊的窗體會優先充滿剩余空間
的問題依然存在
3. 重寫了 CDockPageBar 類的NcPaint,NcCalClient,OnNcLButtonXXXX,OnNcHitTest 的實現
把標簽和標題欄的重畫放到非客戶區來做,把原來的繪圖效果作了改進
4.增加對MDI 的支持
仍有待解決的問題:
1.橫向停泊的窗體會優先充滿剩余空間
2.如果框架程序中有工具條,且為可停泊的(Dockable),在自動隱藏時行為不是很合理(浮動窗體
有可能會將遮住工具條)
圖一: 多文檔框架的停泊窗體
圖二: 多文檔框架的自動隱藏窗體
使用的方法與《輕松實現類MSDN2002界面(二)》中基本一樣
不同在於對於多文檔 CMainframe 是從CDMIAutoHideFrame 繼承的.
例子工程中MDI是vc2003 作的,SDI VC6和vc2003都可用
另外,如果你想使用靜態MFC 連接,需要加一個編譯選項STATIC_MFC_LINK ,否則畫出的窗體會比較難看。
很希望有人能幫助解決尚存的兩個問題