複製鏈接
請複製以下鏈接發送給好友

菜單欄

鎖定
菜單欄實際是一種樹型結構,為軟件的大多數功能提供功能入口。點擊以後,即可顯示出菜單項。
菜單欄是按照程序功能分組排列的按鈕集合,在標題欄下的水平欄。Microsoft Word2003菜單欄位於標題欄下方,由“文件”和“視圖”等9個菜單命令組成。菜單也可以在VC的資源視圖中直接創建編輯。MFC為菜單的操作提供了CMenu類。
中文名
菜單欄
外文名
menu bar
位    置
標題欄下方
組    成
9個命令菜單
分    類
下拉式菜單和彈出式菜單

菜單欄概述

菜單,將系統可以執行的命令以階層的方式顯示出來的一個界面。一般置於畫面的最上方或者最下方,應用程序能使用的所有命令幾乎全部都能放入。重要程度一般是從左到右,越往右重要度越低。命定的層次根據應用程序的不同而不同,一般重視文件的操作、編輯功能,因此放在最左邊,然後往右有各種設置等操作,最右邊往往設有幫助。一般使用鼠標的第一按鈕進行操作。 [1] 
即時菜單(又稱功能表、上下文菜單(Context Menu)),與應用程序準備好的層次菜單不同,在菜單欄以外的地方,通過鼠標的第二按鈕調出的菜單稱為“即時菜單”。根據調出位置的不同,菜單內容即時變化,列出所指示的對象可以進行的操作。 [1] 

菜單欄Word中

Microsoft Word2003菜單欄位於標題欄下方,由“文件”、“編輯”、“視圖”、“插入”、“格式”、“工具”、“表格”、“窗口”和“幫助”等組成組成。
Microsoft Word2003菜單欄 Microsoft Word2003菜單欄
單擊菜單欄中的菜單命令將會出現一個下拉菜單。Word2003的菜單有自動記錄功能,也就是説Word 2003記錄了用户的常用操作習慣,只在菜單中顯示最接近上次常用的命令,這為用户選擇常用命令提供了很大的方便。如果某些命令在一段時間內沒有被使用,就會自動隱藏。在菜單的底部都有一個箭頭按鈕,單擊該按鈕即可顯示全部的菜單命令。
在菜單欄中,某些命令後邊有個箭頭符號,這表示該命令項後還有下一級子菜單。將鼠標停留一下,就會自動彈出子菜單。
如果在菜單命令的前面有一個對號,表明該菜單命令被激活。取消該命令前面的對號,則表明該命令沒有被激活。如果用户看到某些命令的顏色變為淺灰色,表示該菜單命令暫時不能使用。如果菜單命令前面有圖標,表明可以將這些命令添加到工具欄中。如果我們還會看見菜單命令的後面有組合按鍵,如Ctrl+O,這實際上的該命令的快捷鍵,熟記這些快捷鍵有助於我們快速操作。

菜單欄控件菜單

菜單控件顯示應用程序的自定義菜單。命令、子菜單或者分隔條都可包括在菜單之中。每一個創建的菜單至多有四級子菜單。菜單控件是一組通常在功能上相關的命令或控件的容器。提供特殊的佈局行為,並支持用户啓動的工具欄大小調整和排列。像winform/wpf ToolBar控件或專業控件ComponentOne的MenusandToolbars [1]  ,可創建停靠/浮動的工具欄,多級菜單,全局的快捷鍵、可摺疊/可展開的頁面,MDI 應用程序使用的窗口列表等。

菜單欄VC菜單

菜單欄簡介

菜單在界面設計中是經常使用的一種元素,包括Windows系統中的窗口、智能終端設備的應用界面等都會經常見到菜單的身影。我們在對可視化窗口操作時,菜單確實提供了很大方便。
菜單可以分為下拉式菜單和彈出式菜單。
下拉式菜單一般在窗口標題欄下面顯示。下拉式菜單通常是由主菜單欄、子菜單及子菜單中的菜單項和分隔條所組成的。
彈出式菜單一般可以通過單擊鼠標右鍵等操作顯示。它的主菜單不可見,只顯示子菜單。

菜單欄資源

菜單也可以在VC的資源視圖中直接創建編輯。我們先創建一個新的MFC單文檔工程Example34,具體看看菜單的組成結構及各種標記的意義。
打開Resource View資源視圖,展開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”。 [2] 

菜單欄CMenu類

MFC為菜單的操作提供了CMenu類,下面就常用的幾個成員函數進行簡單的介紹。
BOOL LoadMenu(UINT nIDResource);
加載菜單資源,並將其附加到CMenu對象上。參數nIDResource指定了要加載的菜單資源的ID。如果菜單加載成功則返回TRUE,否則返回FALSE。
BOOL DeleteMenu(UINT nPosition,UINT nFlags);
在菜單中刪除一個菜單項。參數nPosition指定要刪除的菜單項。參數nFlags就用來解釋nPosition的意義,為MF_BYCOMMAND時説明nPosition表示菜單項的ID,為MF_BYPOSITION時説明nPosition表示菜單項的位置,第一個菜單項的位置為0。如果刪除菜單項成功則返回TRUE,否則返回FALSE。
BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect = 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忽略。
UINT CheckMenuItem(UINT nIDCheckItem,UINT nCheck);
在彈出菜單中為菜單項增加選中標記或移除選中標記。參數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。
UINT EnableMenuItem(UINT nIDEnableItem,UINT nEnable);
激活、禁用菜單項或使其變灰。參數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(int nPos) const;
獲取彈出菜單的CMenu對象。參數nPos指定彈出菜單在菜單中的位置,不能使用ID。返回值是CMenu對象的指針,該CMenu對象的m_hMenu成員為由nPos指定的彈出菜單的句柄,如果不存在這樣的CMenu對象則返回NULL,然後創建一個臨時彈出菜單。 [3] 

菜單欄ASP.NET 菜單欄控件概述

利用 ASP.NETMenu控件,可以開發 ASP.NET 網頁的靜態和動態顯示菜單。您可以在Menu控件中直接配置其內容,也可通過將該控件綁定到數據源的方式來指定其內容。 [1] 
無需編寫任何代碼,便可控制 ASP.NETMenu控件的外觀、方向和內容。除該控件公開的可視屬性外,該控件還支持 ASP.NET 控件外觀和主題。有關外觀和主題的更多信息,請參見ASP.NET 主題和外觀概述。 [1] 
靜態顯示和動態顯示 [1] 
Menu控件具有兩種顯示模式:靜態模式和動態模式。靜態顯示意味着Menu控件始終是完全展開的。整個結構都是可視的,用户可以單擊任何部位。在動態顯示的菜單中,只有指定的部分是靜態的,而只有用户將鼠標指針放置在父節點上時才會顯示其子菜單項。 [1] 

菜單欄靜態顯示行為

使用Menu控件的StaticDisplayLevels屬性可控制靜態顯示行為。StaticDisplayLevels屬性指示從根菜單算起,靜態顯示的菜單的層數。例如,如果將StaticDisplayLevels設置為 3,菜單將以靜態顯示的方式展開其前三層。靜態顯示的最小層數為 1,如果將該值設置為 0 或負數,該控件將會引發異常。 [1] 

菜單欄動態顯示行為

MaximumDynamicDisplayLevels屬性指定在靜態顯示層後應顯示的動態顯示菜單節點層數。例如,如果菜單有 3 個靜態層和 2 個動態層,則菜單的前三層靜態顯示,後兩層動態顯示。 [1] 
如果將MaximumDynamicDisplayLevels設置為 0,則不會動態顯示任何菜單節點。如果將MaximumDynamicDisplayLevels設置為負數,則會引發異常。 [1] 
參考資料