在開發軟件的菜單界面時,能按Windows所設定的規范進行,不僅能使所開發出的應用軟件的菜單界面更美觀豐富,而且能與Windows中各軟件協調一致,使大量熟悉Windows操作的用戶,一看菜單,就能根據平時的使用經驗,觸類旁通地知曉該應用軟件的各功能和簡捷的操作方法,增強軟件的靈活性和可操作性。
以下以VB5.0的工具菜單欄(Tools)中的“菜單編輯器”和一個“學生檔案管理軟件”(主要有“文件”、“系統初始化”、“年級”、“輸入與查詢”等菜單,分別完成報表打印、新建年級庫、選年級、以及數據庫數據的輸入與查詢等)為例,說明Windows應用軟件菜單設計的一些規則:
一、暫時不可操作的菜單命令項一般要屏蔽變灰
Windows菜單中有一些菜單項是以變灰的形式出現的,並用虛線字符來顯示,這一類的命令表示當前不可用,也就是說,執行此命令的條件當前還不具備。例如,在學生檔案管理軟件中,初始的“輸入與查詢”菜單為灰,因為在沒有選中“年級”的情況下,系統將不知要查詢哪個年級的學生資料。在圖1中設計時,點擊“輸入與查詢”菜單條的“有效(E)”屬性,改變其默認的“有效”為“無效”,然後設計在“年級”菜單中各年級的Click事件中傳遞所選中的年級信息給“輸入與查詢”模塊後改變後者的“有效”屬性值,讓其可操作:
PrivateSubmnu98dz_Click()
Transfer="c:dagl98dz.mdb"
mnuFind.Enabled=True
EndSub
二、正在起作用的菜單命令旁打上選中標記(√)
Windows中有一些命令是觸發式的,打勾號表明該命令正在起作用,否則表明不起作用,可通過點擊,反復切換。例如,在上述所舉的學生檔案管理軟件中,當選擇了某一年級時,系統就在對應年級菜單前打上“√”,表明正在操作的是此年級的數據庫。要做到這一點,只要把菜單編輯器中相應菜單條的“復選(C)"框選中即可,然後在菜單的驅動事件加入如下語句來切換該屬性:mnu98dz.Checked=notmnu98dz.Checked
三、為命令選項設置訪問鍵(Accesskey)
菜單項中帶有下劃線的字母,稱為該命令的訪問鍵,是為了方便使用鍵盤的用戶而設置的,按Alt鍵和該字母時即可打開該菜單,增加訪問鍵只要在菜單編輯器的“標題(P)”框中,在要讓其成為訪問鍵的字母前加“&”即可,當然,訪問鍵最好不要重復,否則系統只認定第一個有效。
四、為命令選項增加快捷鍵(ShortcutKey)
某些菜單命令的右邊有一組合鍵,稱為該命令的快捷鍵,可以不打開菜單而直接按快捷鍵來選擇執行此命令。為一個命令項增加一個快捷鍵,可在菜單編輯器中的“快捷鍵(S)”列表框中為該命令項分配一個,列表中一個快捷鍵只能被分配一次,否則系統會拒絕接受。
五、在要彈出對話框的命令選項後增加省略號(...)提示用戶
Windows中,如果命令項後面有省略號(...),表明選擇此命令將引出一個對話框,從對話框系統要求用戶提供更多執行該命令所需的信息,在設計時只要在會引出對話框的菜單項的標題後增加“(...)"提示即可。
六、用右指向的箭頭(→),來指引用戶選擇此項將引出級聯菜單(CascadingMenu)
級聯菜單即所謂的子菜單,在VB中箭頭由系統根據菜單編輯器中設計菜單大綱時所安排的“縮進”度而自動實現的,因此,關鍵是在設計菜單時合理安排大綱中各菜單項上下級的邏輯關系,在VB中最多可以有四級子菜單。
七、對相關的命令用分隔條(SeparateBar)進行分組
為了讓用戶迅速地在菜單中找到他要執行的命令項,有必要對菜單中相關的一組命令用分隔條進行分組,如文件菜單中,把有關打印輸出的一組命令:“頁面設置”、“打印預覽”、“打印”等用分隔條醒目地進行分隔。這只要在需要進行分組的命令之間插入一個特殊的命令條,該命令條的“標題”為“-”,而“名稱”任意,因為在程序中一般不會引用此命令的名稱。
八、建立動態菜單,提高軟件的靈活性
動態菜單即運行時會伸縮的菜單,Windows中有許多軟件的“文件”菜單中都具有記憶最近操作過的幾個文檔名的功能,在本文所舉例的學生檔案管理軟件中,因為每年都會有新的學生到校,在形成新的年級時,要在“年級”菜單中動態地增加新的年級名稱以供選擇和查詢,這首先要在設計時生成菜單命令的控件數組(MenuControlArray),在菜單的編輯器中加入一個菜單選項,設其Index屬性設置為0,然後可以加入名稱相同(在本例中名稱為MnuNj),Index值相鄰遞增的菜單選項(比如加入10個),設計時讓它們標題框均為空,留作日後引用填入新年級名,並設這些備用菜單條的“可見”屬性為無效,即目前不可見。在有建立和刪年級庫功能的“系統初始化”菜單驅動事件中引用這個數組名和索引值在“輸入與查詢”中動態地加進新的年級名選項,並讓其可見或不可見(在刪除時):
PrivateAddMenu_Click()
Counter=counter+1
Nj=Nj+1’Nj是一個模塊級變量,初值為1998
MnuNj(counter).Caption=Nj&"年級"
MnuNj(counter).Visible=Ture
EndSub
Windows中許多應用程序的“文件"菜單記住最近使使過的文件名的實際方法與此類似。
九、生成彈出式菜單,增強軟件的可操作性
有時為了方便用戶需要,為一些最常用的命令建立右鍵彈出式快捷菜單,這種菜單的前期設計和普通菜單一樣,不同的是一般要先點擊“可見(P)”框,讓此菜單不可見,然後在窗體的MouseDown或MouseUp事件中引用PopupMenu方法來實現在窗體上按下鼠標右鍵時彈出此菜單:
PrivateSubMdiForm1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Ifbutton=2the’MnuEdit為制作的要彈出的菜單
PopupmenuMnuEdit
EndSub
PopupMenu方法將忽略初始設置的“不可見”屬性。
使用Windows下的其他軟件開發工具設計菜單時,情形與之類似。->