在實際的軟件開發(fā)中,我們常常需要創(chuàng)建多個自定義的工具條,并且要象標準的工具條那樣,允許用戶通過鼠標將自定義的工具條移動到框架的其它地方,還可以根據(jù)需要顯示或是隱藏該工具條。通過實踐,我們在Visual C++ 6.0中編程實現(xiàn)了創(chuàng)建自定義的工具條,從而在應(yīng)用程序中可并存多個工具條。
1. 在Visual C++ 6.0中用AppWizard以默認方式創(chuàng)建SDI或MDI的應(yīng)用程序工程,工程名稱為MyBars。
2. 在ResourceView中選擇“Toolbar”并點擊右鍵,通過選擇 “Insert Toolbar”新建一工具條,其ID值設(shè)為ID_MYTOOLBAR。在該工具條上添加兩個位圖按鈕,并雙擊每個位圖按鈕,設(shè)置其ID值分別為ID_MYTOOLBAR_CIRCLE和ID_MYTOOLBAR_RECT。
3. 在MainFrame.h文件中CMainFrame類定義的前面定義一個映射工具條按鈕圖像和程序命令I(lǐng)D 的數(shù)組,這是一個UINT類型的數(shù)組:
static UINT BASED_CODE My_Buttons[]=
{ // 要和工具條中位圖的次序一樣
ID_TOOLBAR_CIRCLE,
ID_TOOLBAR_RECT};
4. 在CMainFrame類中添加一工具條對象指針m_pMyToolBar:
class CMainFrame : public CFrameWnd
{……
protected:
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
CToolBar m_pMyToolBar;
// 新添加的工具條對象指針
……}
5.在CMainFrame::OnCreate函數(shù)中添加代碼創(chuàng)建和初始化工具條,并建立所需的連接關(guān)系,代碼如下:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ ……
// 創(chuàng)建和初始化工具條對象
m_pMyToolBar=new CToolBar();
m_pMyToolBar-〉Create(this, WS_CHILD|WS_VISIBLE|CBRS_TOP, 0x9100);
// 將按鈕圖象和工具條對象連接起來
m_pMyToolBar-〉LoadBitmap(IDR_MYTOOLBAR);
// 將映射數(shù)組My_Buttons和工具條對象連接起來
m_pMyToolBar-〉SetButtons(My_Buttons, sizeof(My_Buttons)/sizeof(UINT));
// 允許用戶通過鼠標將工具條移動到框架的其它地方
m_pMyToolBar-〉EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(m_pMyToolBar);
return 0; }
6. 通過View-〉ClassWizard為工具條的按鈕ID值添加消息響應(yīng)處理函數(shù),例如為ID_TOOLBAR_CIRCLE添加的處理函數(shù)如下所示:
void CMainFrame::OnToolbarCircle()
{ AfxMessageBox("Circle"); // 可改為具體的有關(guān)代碼}
這樣,我們就創(chuàng)建了一個新的工具條(如圖1),上面有兩個按鈕,點擊按鈕將會執(zhí)行有關(guān)的操作,并且用戶還可以將工具條任意拖動到框架的其它地方。
工具條建立之后,就被連接到應(yīng)用程序的框架窗口上,我們一般還要允許用戶根據(jù)需要顯示或隱藏該工具條。下面的代碼就可實現(xiàn)這種要求:
int nShow=SW_SHOWNORMAL; // 想要隱藏則設(shè)置為SW_HIDE
m_pMyToolBar-〉ShowWindow(nShow); // 顯示或隱藏工具條
RecalcLayout(); // 通知框架窗口, 重新計算工具條的位置
以上的程序在Visual C++ 6.0中調(diào)試通過。