前面我們分別使用過 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 301
MYMENU1 MENUEX
BEGIN
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
END
END
顯示效果圖: