前面我們分別使用過 MENU 和 MENUEX 來指定菜單資源, 我發現用 MENU 不必注意大小寫; 但 MENUEX 在使用參數時需要注意大小寫! 另外, 指定相同的功能時, 它們使用的參數和格式也有很大的區別. 我想還是多瞭解 MENUEX 吧, 因為它的參數同時也是 Win32API 菜單函數們 需要的!
MENUEX 有四個參數, 分別是: 菜單文本, 菜單標識(整數), 菜單格式(常數: MFT_*), 菜單樣式(常數: MFS_*).
後兩個參數都有系統預定義的常量, 列表如下:
MFT_STRING = 0; {功能表項目是字串}MFT_BITMAP = 4; {功能表項目用一個圖片來代替(暫沒測試)}MFT_MENUBARBREAK = $20; {換列並有分列線}MFT_MENUBREAK = $40; {換列}MFT_OWNERDRAW = $100; {指定為物主菜單; 通過 WM_DRAWITEM 訊息的申請可以繪製更複雜的菜單}MFT_RADIOCHECK = $200; {圓點代替 √ 來表示選擇MFT_SEPARATOR = $800; {指定為分割線, 會忽略前面指定的菜單文本}MFT_RIGHTORDER = $2000; {靠右對齊}MFT_RIGHTJUSTIFY = $4000; {顯示在右邊(協助位置)}MFS_GRAYED = 3; {禁止使用, 灰階顯示}MFS_DISABLED = MFS_GRAYED; {同上}MFS_CHECKED = 8; {選擇}MFS_HILITE = $80; {反色凸現}MFS_ENABLED = 0; {不禁止, 這是預設的, 一般用於程式中對禁止的反操作}MFS_UNCHECKED = 0; {不選擇}MFS_UNHILITE = 0; {不反色}MFS_DEFAULT = $1000; {指定為預設, 應該類似與預設按鈕(還沒試過), 會加粗顯示菜單文本}
以上同類參數可以通過 "或" 運算來同時指定功能, 當然這裡不能使用 Delphi 的 "or", 是用 C/C++ 的 "|" 運算子. 再舉個例子:
#define IDM_New 101#define IDM_Open 102#define IDM_Save 103#define IDM_Exit 104#define IDM_Cut 201#define IDM_Copy 202#define IDM_Paste 203#define IDM_About 301MYMENU1 MENUEXBEGIN POPUP "&File" ,65535 BEGIN MENUITEM "&New" ,IDM_New ,MFT_STRING | MFT_RIGHTORDER ,MFS_DEFAULT | MFS_CHECKED | MFS_GRAYED MENUITEM "&Open" ,IDM_Open ,MFT_STRING, MFS_HILITE MENUITEM "&Save" ,IDM_Save MENUITEM SEPARATOR MENUITEM "E&xit" ,IDM_Exit END POPUP "&Edit" ,65535 BEGIN MENUITEM "Cu&t" ,IDM_Cut MENUITEM "&Copy" ,IDM_Copy MENUITEM "&Paste" ,IDM_Paste END POPUP "&Help" ,65535 BEGIN MENUITEM "&About" ,IDM_About ENDEND
顯示: