許多程序員都希望自己的程序能更象商業化程序,特別是希望自己的程序工具 條能夠象WINDOWS95下的OFFICES一樣具有浮動效果。針對VISUALC++編程環境, 以下分別介紹了兩種產生浮動工具條的方法。各有其優點和不足,可供程序員選擇。
第一種方法
該方法最為簡單,利用VC中的工具條的系統未公布的隱含參數 TBSTYLE_FLAT,不需更改原由程序只要在程序中添加4條語句即可實現浮動效果。 不過該方法只能產生簡單的浮動工具條,而且沒有象OFFICES中工具條右側的拖 動條gripper。而且該方法在VC50下存在嚴重的缺陷,當拖動工具條時,系統不 能對工具條進行刷新,因此會產生移動工具條到新位置時,原處仍有工具條。主 要是負責工具條的動態連接庫COMCTL32.DLL的BUG。該問題在VC60中由於更新了 該動態連接庫而得以解決。程序員如果使用的是VC5版可以用新的版本COMCTL32.DLL (4.72版以上)替換該動態連接庫來解決。
具體方法如下:
int CMainFrame::OnCreate
(LPCREATESTRUCT lpCreateStruct)
{
...
m_wndToolBar.SetBarStyle
(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY |
CBRS_SIZE_DYNAMIC|TBSTYLE_FLAT);
//添加以下4句語句,產生浮動效果
LONG lStyle;
lStyle=GetWindowLong
(m_wndToolBar,GWL_STYLE);
lStyle=lStyle|TBSTYLE_FLAT;
SetWindowLong(m_wndToolBar,
GWL_STYLE,lStyle);
m_wndToolBar.EnableDocking
(CBRS_ALIGN_ANY);
...
}
第二種方法
該方法是對MFC原來的CTOOLBAR類進行繼承,主要是重載成員函數 OnWindowPosChanging(LPWINDOWPOS lpWndPos);OnPaint();OnNcPaint();OnNcCalcSize(); 實現浮動工具條。使用本類,只要將以下的程序代碼FlatToolBar.h和FlatToolBar.Cpp 加入項目,並用INCLUDE將FlatToolBar.H包含到繪制主窗口的CMainFrame中,然後把你 的原先定義工具條變量的CToolBar類變成 CFlatToolBar類,並在建立工具條後調用 SetFlatLookStyle()函數設置浮動方式。為方便以後其它使用程序,可以在該類 上右擊鼠標,選擇Add to Gallery將CFlatToolBar類存入類庫以便下次使用。