概述
選單,將系統可以執行的命令以階層的方式顯示出來的一個界面。一般置於畫面的最上方或者最下方,應用程式能使用的所有命令幾乎全部都能放入。重要程度一般是從左到右,越往右重要度越低。命定的層次根據應用程式的不同而不同,一般重視檔案的操作、編輯功能,因此放在最左邊,然後往右有各種設定等操作,最右邊往往設有幫助。一般使用滑鼠的第一按鈕進行操作。
即時選單(又稱功能表、上下文選單(ContextMenu)),與應用程式準備好的層次選單不同,在選單欄以外的地方,通過滑鼠的第二按鈕調出的選單稱為“即時選單”。根據調出位置的不同,選單內容即時變化,列出所指示的對象可以進行的操作。
Word中
MicrosoftWord2003選單欄位於標題欄下方,由“檔案”、“編輯”、“視圖”、“插入”、“格式”、“工具”、“表格”、“視窗”和“幫助”等9個選單命令組成。
單擊選單欄中的選單命令將會出現一個下拉選單。Word2003的選單有自動記錄功能,也就是說Word2003記錄了用戶的常用操作習慣,只在選單中顯示最接近上次常用的命令,這為用戶選擇常用命令提供了很大的方便。如果某些命令在一段時間內沒有被使用,就會自動隱藏。在選單的底部都有一個箭頭按鈕,單擊該按鈕即可顯示全部的選單命令。
在選單欄中,某些命令後邊有個箭頭符號,這表示該命令項後還有下一級子選單。將滑鼠停留一下,就會自動彈出子選單。
如果在選單命令的前面有一個對號,表明該選單命令被激活。取消該命令前面的對號,則表明該命令沒有被激活。如果用戶看到某些命令的顏色變為淺灰色,表示該選單命令暫時不能使用。如果選單命令前面有圖示,表明可以將這些命令添加到工具列中。如果我們還會看見選單命令的後面有組合按鍵,如Ctrl+O,這實際上的該命令的快捷鍵,熟記這些快捷鍵有助於我們快速操作。
控制項選單
選單控制項顯示套用程式的自定義選單。命令、子選單或者分隔條都可包括在選單之中。每一個創建的選單至多有四級子選單。選單控制項是一組通常在功能上相關的命令或控制項的容器。提供特殊的布局行為,並支持用戶啟動的工具列大小調整和排列。像winform/wpfToolBar控制項或專業控制項ComponentOne的MenusandToolbars,可創建停靠/浮動的工具列,多級選單,全局的快捷鍵、可摺疊/可展開的頁面,MDI應用程式使用的視窗列表等。
VC選單
簡介
選單在界面設計中是經常使用的一種元素,包括Windows系統中的視窗、智慧型終端設備的套用界面等都會經常見到選單的身影。我們在對可視化視窗操作時,選單確實提供了很大方便。
選單可以分為下拉式選單和彈出式選單。
下拉式選單一般在視窗標題欄下面顯示。下拉式選單通常是由主選單欄、子選單及子選單中的選單項和分隔條所組成的。
彈出式選單一般可以通過單擊滑鼠右鍵等操作顯示。它的主選單不可見,只顯示子選單。
資源
選單也可以在VC的資源視圖中直接創建編輯。我們先創建一個新的MFC單文檔工程Example34,具體看看選單的組成結構及各種標記的意義。
打開ResourceView資源視圖,展開Example34->Example34.rc->Menu,我們可以看到有一個ID為IDR_MAINFRAME選單資源,雙擊打開。
包含“File”的一欄是主選單欄,點擊“File”彈出子選單,可以看到子選單中有多個選單項和分隔條。選單項中含有“...”則表示點擊後會彈出對話框。
除了這些,我們還注意到,很多選單項的標題文本中都有一個字母帶下劃線,帶下劃線的字母為熱鍵,例如,主選單欄上的“File”中字母“F”帶下劃線,F就是熱鍵,程式運行並顯示視窗時,在鍵盤上點擊Alt+F就等同於直接點選單項File,彈出File下的子選單後,點擊“Open”的熱鍵O就可以實現與直接點選單項Open相同的功能。
那么熱鍵是如何定義的呢?我們可以看下“File”選單項的屬性,Caption為“&File”,很明顯,只要在要定義為熱鍵的字母前加&就可以了。
有些選單項的右側還顯示了一些字元串,例如,“New”的右側顯示有“Ctrl+N”,這些代表的是快捷鍵,也就是“New”選單項的快捷鍵是Ctrl+N,“Open”選單項的快捷鍵是Ctrl+O,用這些組合鍵就能實現與相應選單項一樣的功能。
快捷鍵如何定義?我們再來看看“Open”選單項的Caption屬性,為“&Open...\tCtrl+O”,這裡的\t表示在顯示前面的文本後跳格再顯示快捷鍵Ctrl+O,但這樣設定其Caption屬性只是能顯示出快捷鍵,要實現快捷鍵的功能還需要在Accelerator資源中設定。資源視圖中展開Example34.rc->Accelerator,雙擊打開下面的IDR_MAINFRAME,可以看到Accelerator中有四列,分別為:ID、Modifier、Key和Type。ID就是選單項的ID,Modifer和Key就代表了組合鍵。例如,Open選單項的ID為ID_FILE_OPEN,Modifer為“Ctrl”,Key為“O”。
CMenu類
MFC為選單的操作提供了CMenu類,下面就常用的幾個成員函式進行簡單的介紹。
BOOLLoadMenu(UINTnIDResource);
載入選單資源,並將其附加到CMenu對象上。參數nIDResource指定了要載入的選單資源的ID。如果選單載入成功則返回TRUE,否則返回FALSE。
BOOLDeleteMenu(UINTnPosition,UINTnFlags);
在選單中刪除一個選單項。參數nPosition指定要刪除的選單項。參數nFlags就用來解釋nPosition的意義,為MF_BYCOMMAND時說明nPosition表示選單項的ID,為MF_BYPOSITION時說明nPosition表示選單項的位置,第一個選單項的位置為0。如果刪除選單項成功則返回TRUE,否則返回FALSE。
BOOLTrackPopupMenu(UINTnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=0);
用來在指定位置顯示一個浮動的彈出式選單。參數nFlags指定螢幕坐標和滑鼠位置的標誌,可以是以下取值:
TPM_CENTERALIGN:選單在水平方向上相對於參數x指定的坐標值居中顯示
TPM_LEFTALIGN:選單的左側與參數x指定的坐標值對齊
TPM_RIGHTALIGN:選單的右側與參數x指定的坐標值對齊
TPM_BOTTOMALIGN:選單的底部與參數y指定的坐標值對齊
TPM_TOPALIGN:選單項的頂部與參數y指定的坐標值對齊
TPM_VCENTERALIGN:選單在垂直方向上相對於參數y指定的坐標值居中顯示
這裡先介紹這幾個比較常用的,其他可參見MSDN。參數x指定彈出式選單的水平方向的螢幕坐標,參數y指定選單頂部垂直方向上的螢幕坐標,參數pWnd指明哪個視窗擁有此彈出式選單,不能為NULL,參數lpRect忽略。
UINTCheckMenuItem(UINTnIDCheckItem,UINTnCheck);
在彈出選單中為選單項增加選中標記或移除選中標記。參數nIDCheckItem指定要選中或取消選中的選單項。參數nCheck指定選單項的選中狀態和如何根據nIDCheckItem確定選單項的位置,可以是MF_CHECKED或MF_UNCHECKED與MF_BYPOSITION或MF_BYCOMMAND的組合,這幾個標誌的含義如下:
MF_BYCOMMAND:為默認值。說明參數nIDCheckItem表示選單項的ID
MF_BYPOSITION:說明參數nIDCheckItem表示選單項的位置,第一個選單項的位置是0
MF_CHECKED:為選單項添加選中標記
MF_UNCHECKED:為選單項移除選中標記
該函式返回選單項之前的狀態:MF_CHECKED或MF_UNCHECKED,如果選單項不存在則返回0xFFFFFFFF。
UINTEnableMenuItem(UINTnIDEnableItem,UINTnEnable);
激活、禁用選單項或使其變灰。參數nIDEnableItem指定要激活、禁用或變灰的選單項。參數nEnable指定操作的類型,可以是MF_DISABLED、MF_ENABLED或MF_GRAYED與MF_BYCOMMAND或MF_BYPOSITION的組合,這些值的含義如下:
MF_BYCOMMAND:同CheckMenuItem
MF_BYPOSITION:同CheckMenuItem
MF_DISABLED:禁用選單項,使其不能被選擇但不變灰
MF_ENABLED:激活選單項,使其能夠被選擇並由變灰狀態恢復
MF_GRAYED:禁用選單項,使其不能被選擇並變灰
該函式返回選單項之前的狀態:MF_DISABLED、MF_ENABLED或MF_GRAYED
CMenu*GetSubMenu(intnPos)const;
獲取彈出選單的CMenu對象。參數nPos指定彈出選單在選單中的位置,不能使用ID。返回值是CMenu對象的指針,該CMenu對象的m_hMenu成員為由nPos指定的彈出選單的句柄,如果不存在這樣的CMenu對象則返回NULL,然後創建一個臨時彈出選單。
控制項概述
利用ASP.NETMenu控制項,可以開發ASP.NET網頁的靜態和動態顯示選單。您可以在Menu控制項中直接配置其內容,也可通過將該控制項綁定到數據源的方式來指定其內容。
無需編寫任何代碼,便可控制ASP.NETMenu控制項的外觀、方向和內容。除該控制項公開的可視屬性外,該控制項還支持ASP.NET控制項外觀和主題。有關外觀和主題的更多信息,請參見ASP.NET主題和外觀概述。
靜態顯示和動態顯示
Menu控制項具有兩種顯示模式:靜態模式和動態模式。靜態顯示意味著Menu控制項始終是完全展開的。整個結構都是可視的,用戶可以單擊任何部位。在動態顯示的選單中,只有指定的部分是靜態的,而只有用戶將滑鼠指針放置在父節點上時才會顯示其子選單項。
靜態顯示行為
使用Menu控制項的StaticDisplayLevels屬性可控制靜態顯示行為。StaticDisplayLevels屬性指示從根選單算起,靜態顯示的選單的層數。例如,如果將StaticDisplayLevels設定為3,選單將以靜態顯示的方式展開其前三層。靜態顯示的最小層數為1,如果將該值設定為0或負數,該控制項將會引發異常。
動態顯示行為
MaximumDynamicDisplayLevels屬性指定在靜態顯示層後應顯示的動態顯示選單節點層數。例如,如果選單有3個靜態層和2個動態層,則選單的前三層靜態顯示,後兩層動態顯示。
如果將MaximumDynamicDisplayLevels設定為0,則不會動態顯示任何選單節點。如果將MaximumDynamicDisplayLevels設定為負數,則會引發異常。