工具欄設計及與菜單命令的聯(lián)動(dòng)
工具欄上通常有一系列的工具按鈕,所有的按鈕圖像都具有相同的尺寸,一般是15像素高,16像素寬,借助它們可以提高用戶(hù)的工作效率,并且將常用的菜單命令也放在工具欄上,它們實(shí)際是命令不同的用戶(hù)方式。
1. 添加并設計工具欄
(1) 將解決方案資源管理器窗口切換到"資源視圖",展開(kāi)后右擊Toolbar,在彈出的快捷菜單中單擊"插入Toolbar"。這樣,一個(gè)工具欄資源就添加到項目中,默認的標識為IDR_TOOLBAR1。
(2) 添加并設計2個(gè)工具按鈕,結果如圖10所示。

圖11 工具按鈕的設計
由于其編輯操作與Windows的畫(huà)圖相類(lèi)似,故這里僅列出操作的一些技巧:
?、?單擊空白按鈕后就可以編輯其圖像,同時(shí)系統在隨后的位置自動(dòng)添加一個(gè)空白按鈕。
?、?用鼠標可以將一個(gè)按鈕拖放到工具欄上的其他位置上。若拖動(dòng)時(shí)按下Ctrl鍵,則復制一個(gè)工具按鈕。若將工具按鈕拖出工具欄,則該工具按鈕被刪除。
?、?按Delete鍵可以將當前工具按鈕的圖像用背景色填充。
?、?在工具按鈕之間添加間隔時(shí),可按不同情況來(lái)操作。若工具按扭前沒(méi)有任何間隔,拖動(dòng)該工具按鈕向右直到它覆蓋相鄰工具按鈕的一半以上后,釋放鼠標鍵,則此工具按鈕前出現間隔。若工具按鈕前面有間隔而后面沒(méi)有間隔,拖動(dòng)該工具按鈕向左直到它的左邊界接觸到它前面的工具按鈕為止,釋放鼠標鍵,則此工具按鈕后面將出現間隔。
?、?若工具按鈕前后均有間隔,拖動(dòng)該工具按鈕向右直到它接觸相鄰工具按鈕,則此工具按鈕前的間隔保留,工具按鈕后的間隔消失。反之,若拖動(dòng)該工具按鈕向左直到它接觸相鄰的前一個(gè)工具按鈕,則此工具按鈕前面的間隔消失,后面的間隔仍保留。
?、?刪除工具按鈕間隔時(shí),只要將間隔一端的工具按鈕拖向間隔另一端的工具按鈕,直到與另一個(gè)按鈕重疊一半以上即可。
(3) 單擊第一個(gè)工具按鈕,在工具按鈕的屬性窗口中,將其ID號選擇為ID_FORMAT_TXTFONT,這是將工具按鈕與菜單命令聯(lián)動(dòng)的關(guān)鍵。將其Prompt屬性?xún)热莞某?改變顯示的字體\n字體"。Prompt屬性是用來(lái)指定工具按鈕的提示文本。例如若為"改變顯示的字體\n字體"時(shí),則表示當鼠標移至該工具按鈕時(shí),在狀態(tài)欄中就會(huì )顯示"改變顯示的字體",稍等片刻后還會(huì )彈出一個(gè)小的提示窗口,顯示出"字體"字樣。注意:提示窗口顯示的內容是Prompt屬性字符串中"\n"后的內容。
(4) 將第二個(gè)工具按鈕的ID號選擇為ID_FORMAT_TXTCOLOR,Prompt設為"改變文本的顯示顏色\n顏色"。
2. 工具欄代碼的實(shí)現
(1) 在CMainFrame類(lèi)中添加一個(gè)成員變量m_wndFormatBar,變量類(lèi)型為CToolBar。CToolBar類(lèi)封裝了工具欄的操作。
(2) 在CMainFrame::OnCreate()函數中添加工具欄的創(chuàng )建代碼,如圖11所示的加框部分。

程序說(shuō)明:
?、?主框架類(lèi)CMainFrame用來(lái)負責窗口的菜單欄、工具欄和狀態(tài)欄的創(chuàng )建和更新工作。因此我們將工具欄的創(chuàng )建代碼添加在CMainFrame的OnCreate()函數中。
?、?CreateEx()是CToolBar類(lèi)的成員函數,用來(lái)創(chuàng )建一個(gè)工具欄對象。
?、?if語(yǔ)句的LoadToolBar()函數是用來(lái)裝載工具欄資源。若CreateEx()或LoadToolBar()的返回值為0,即調用不成功,則顯示診斷信息"未能創(chuàng )建工具欄"。TRACE0是一個(gè)用于程序調試的跟蹤宏。OnCreate()函數返回-1時(shí),主框架窗口被清除。
?、?應用程序中的工具欄一般具有??炕蚋?dòng)特性,m_wndFormatBar.EnableDocking()使得m_wndFormatBar對象可以???,CBRS_ALIGN_ANY表示可以??吭诖翱诘娜我贿?。 EnableDocking(CBRS_ALIGN_ANY)是調用的是CFrameWnd類(lèi)的成員函數,用來(lái)讓工具欄或其他控制條在主框架窗口可以進(jìn)行??坎僮?。DockControlBar()也是CFrameWnd類(lèi)的成員函數,用來(lái)將指定的工具欄或其他控制條進(jìn)行???。
?、?AFX_IDW_TOOLBAR是系統內部的工具欄子窗口標識,并將AFX_IDW_TOOLBAR+1的值表示默認的狀態(tài)欄子窗口標識。如果在創(chuàng )建新的工具欄時(shí)沒(méi)有指定相應的子窗口標識,則會(huì )使用默認的AFX_IDW_TOOLBAR。這樣,當打開(kāi)"視圖"菜單時(shí),單擊"工具欄"菜單時(shí),顯示或隱藏的工具欄不是原來(lái)的工具欄而是新添加的工具欄。因此,我們需要重新指定工具欄子窗口的標識,并使其值等于A(yíng)FX_IDW_TOOLBAR + 10。
(3) 運行程序,可以看到新添加的工具欄,如圖12所示,左圖是工具欄開(kāi)始的??壳闆r,右圖是工具欄浮動(dòng)的情形。


需要說(shuō)明的是,上述工具按鈕是與菜單命令聯(lián)動(dòng),因此無(wú)需進(jìn)行工具按鈕命令的消息映射,因為該命令已在菜單操作該命令已映射過(guò)。若是單獨一個(gè)工具按鈕,則需要對該工具按鈕進(jìn)行命令消息的映射,否則按鈕是灰顯的。工具按鈕的命令消息映射方法與菜單命令相同。
聯(lián)系客服