在圖12中,關(guān)閉浮動(dòng)的"格式"工具欄后,若再顯示該工具欄則無(wú)法進(jìn)行,為此我們需要添加相關(guān)的控制代碼。這里我們先來(lái)介紹菜單命令的控制方式,然后再說(shuō)明其他的快捷方式。
1. 菜單命令方式
所謂菜單命令方式,即使用菜單命令來(lái)顯示和隱藏指定工具欄。需要解決的問(wèn)題有兩個(gè),一是顯示和隱藏指定工具欄的函數是什么?二是如何實(shí)現菜單項前面的顯示狀態(tài)的更新。所謂顯示狀態(tài),即當工具欄顯示時(shí),該菜單項前面有一個(gè)"a",否則什么都沒(méi)有。
對于第一個(gè)問(wèn)題,我們可以使用CFrameWnd類(lèi)的成員函數ShowControlBar()來(lái)進(jìn)行,它的原型如下:
void ShowControlBar( CControlBar* PBar, BOOL bShow, BOOL bDelay );
其中,pBar用來(lái)指定要操作的控制條指針,bShow為T(mén)RUE時(shí)表示顯示,否則表示隱藏,bDelay表示是否延遲顯示或隱藏,當為FALSE時(shí)表示立即顯示或隱藏。
對于第二個(gè)問(wèn)題,可以通過(guò)映射宏ON_UPDATE_COMMAND_UI來(lái)實(shí)現菜單項和工具欄按鈕狀態(tài)的改變。下面就來(lái)實(shí)現。
(1) 在"視圖"菜單中添加一個(gè)菜單項"格式工具欄(&F)",ID為ID_VIEW_FORMAT。如圖13所示。

(2) 在CMainFrame類(lèi)中添加一個(gè)成員變量m_bViewFormat,變量類(lèi)型為BOOL。該變量用來(lái)決定新添加的"格式"工具欄是否顯示。
(3) 在CMainFrame類(lèi)的構造函數處,將m_bViewFormat的初值由原來(lái)的FALSE改為T(mén)RUE。
(4) 在CMainFrame類(lèi)中分別添加菜單項ID_VIEW_FORMAT的COMMAND和UPDATE_COMMAND_UI事件映射,并在映射函數添加如圖14所示的代碼。

程序說(shuō)明:
?、?CCmdUI類(lèi)是專(zhuān)門(mén)用于交互對象的更新操作,其成員函數Enable()用來(lái)使交互對象有效(參數為T(mén)RUE)或無(wú)效(參數為FALSE),若不指定參數,使用默認的參數值TRUE。
?、?CCmdUI::SetCheck()用來(lái)設置交互對象狀態(tài)是"選中"(參數為T(mén)RUE)還是"未選中"(參數為FALSE)。當"選中"時(shí),SetCheck()在菜單項文本前面加上"a"。
(5) 運行程序。
2. 快捷鍵方式
快捷鍵用于那些反復使用的菜單命令或工具按鈕命令,當用戶(hù)執行命令時(shí)只要接相應的快捷鍵即可。下面來(lái)添加并使用快捷鍵。
(1) 將解決方案資源管理器窗口切換到"資源視圖",展開(kāi)Accelerator,雙擊IDR_MAINFRAME,出現如圖15所示的快捷鍵資源內容。

需要說(shuō)明的是,在Visual C ++ .net中,每一個(gè)快捷鍵除了ID外,還有三個(gè)屬性:修飾符、鍵和類(lèi)型。"修飾符"屬性用來(lái)設置的快捷鍵是與Alt、Ctrl和Shift的哪一個(gè)或幾個(gè)控制鍵組合。"鍵"屬性用來(lái)設置使用的鍵。"類(lèi)型"屬性是用來(lái)確定鍵是解釋為虛擬鍵(VIRTKEY)還是解釋為ASCII/ANSI。
(2) 單擊最下端的空白方框,出現默認的快捷鍵資源,如圖16所示。

(3) 單擊ID_ACCELERATOR32776后,該ID字段變成了一個(gè)組合框。在這里,我們既可以自己定義一個(gè)資源標識,也可以單擊右側的下拉按鈕,從中選擇一個(gè)已有的資源標識。一旦指定了標識,快捷鍵就與該標識關(guān)聯(lián)起來(lái),這樣當按快捷鍵時(shí)就會(huì )執行與標識相對應的命令。我們選擇前面的菜單標識ID_VIEW_FORMAT。
(4) 單擊Ctrl,從中選擇可以使用的控制鍵,單擊"鍵"字段可以選擇相應的虛擬鍵,或直接輸入字符,表示相應的字符鍵。按圖17來(lái)設置。

(5) 程序運行后,先按住Ctrl,然后再按1鍵,就可以顯示或隱藏格式工具欄了。
需要說(shuō)明的是,為了使用戶(hù)能看到各菜單項所對應的快捷鍵,我們應該在各菜單項的文本后加上快捷鍵的內容。例如,在將菜單項ID_VIEW_FORMAT的文本內容改成"格式工具欄(&F)\t Ctrl+1",其中的"Ctrl+1"表示該菜單項的快捷鍵,"\t"用來(lái)將其后面的內容在下一個(gè)水平制表位置中顯示。
3. 快捷菜單方式
工具欄的顯示和隱藏的快捷方式最常用的是使用快捷菜單。所謂快捷菜單,它是一種浮動(dòng)的彈出式菜單,當用戶(hù)右擊鼠標時(shí),就會(huì )相應地彈出一個(gè)浮動(dòng)菜單,其中提供了幾個(gè)與當前選擇內容相關(guān)的菜單命令。
(1) 在CMainFrame類(lèi)的屬性窗口中,單擊"消息"按鈕,在列表框中找到并添加WM_CONTEXTMENU消息的映射。如圖18所示。

(2) 在映射函數OnContextMenu()中添加代碼,如圖19所示的加框部分。

需要說(shuō)明的是:
?、?在MFC中,AFX_IDW_DOCKBAR_TOP和AFX_IDW_DOCKBAR_FLOAT之間的值用來(lái)標識工具欄的??亢透?dòng)的窗口,而AFX_IDW_PANE_FIRST是標識第一個(gè)視圖窗口,由于單文檔的視圖只有一個(gè),因此它的標識就是該值。
?、?GetMenu是用來(lái)獲取指定菜單下的彈出子菜單,參數的值表示子菜單在主菜單中的位置序號,0時(shí)表示第1個(gè)子菜單,1時(shí)表示第2個(gè)子菜單,以此類(lèi)推。
?、?TrackPopupMenu()用來(lái)彈出一個(gè)快捷菜單,第一個(gè)參數用來(lái)表示菜單在屏幕顯示的位置以及鼠標按鈕標志,當為T(mén)PM_LEFTALIGN時(shí)表示菜單的左邊位置由第二個(gè)參數確定,TPM_RIGHTBUTTON表示用戶(hù)單擊鼠標右鍵時(shí)彈出菜單,最后一個(gè)參數表示彈出菜單的父窗口。this是當前對象指針,每個(gè)類(lèi)對象均有這個(gè)指針。
(3) 運行程序。圖20是兩次不同位置右擊時(shí)彈出的快捷菜單。


聯(lián)系客服