首先用資源編輯器建立一個簡單的菜單:
IDR_MENU MENU
BEGIN
POPUP "幫助"
BEGIN
MENUITEM "關于", IDM_HELP_ABOUT
END
END
這個菜單隻包括一個彈出菜單“幫助”,彈出後隻有一個菜單項“關于”。
為了聲明或者建立軟鍵菜單有兩種方法,一是在 *.rc 檔案中編寫 RCDATA 節:
IDR_SOFTKEYMENU RCDATA
BEGIN
0x0000, 0x0002,
0xFFFE, 0x 9C 56, 0x0004, 0x0010, 0x 9C 58, 0x0000, 0xFFFF,
0xFFFE, 0x 9C 57, 0x0004, 0x0018, 0x 9C 59, 0x0000, 0
END
另外就是在 *.rc2 中常見 SHMENUBAR 節:
IDR_SOFTKEYMEN SHMENUBAR DISCARDABLE
BEGIN
IDR_SOFTKEYMEN, 2,
I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU,
I_IMAGENONE, IDM_HELP, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_HELP, 0, 0,
END
這樣建立的結果是在菜單欄(其實不應該叫做菜單欄)的左邊是一個按鈕:“确定”;右邊是一個探出菜單“幫助”,就是我們手動建立的那個。
兩種方法資料段看起來迥然不同,其實是一樣的,首先是第一行:
0x 007C : menu 的ID,也就是IDR_SOFTKEYMENU;
0x0002: 按鈕的個數,這裡需要兩個,左邊是 BUTTON,右邊是 MENU;
剩下的兩行格式一樣,隻需要解釋一行:
0xFFFE: ICON 的ID,這是I_IMAGENONE 的數值,表示隻有文本,沒有圖示;
0x 9C 56: 這個是按鈕所對應的事件,比如IDM_OK;
0x0004: 菜單的屬性,意思是TBSTATE_ENABLED,這個按鈕可用;
0x0010: 菜單的風格,意思是TBSTYLE_AUTOSIZE | TBSTYLE_BUTTON,自動調整大小,
而且是一個按鈕;如果是TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,就是一
個菜單了;
0x 9C 58: 字元串的ID,比如IDS_OK,按鈕中顯示什麼字元串;
0x0000: 如果目前按鈕對應一個彈出菜單,這是子菜單的索引;
0xFFFF: 這個按鈕所對應的菜單在菜單資源中的坐标(based 0),0xFFFF 是NOMENU。在第二
行裡面是0,表示我們需要菜單定義裡下标為 0 的菜單,就是“幫助”。如果有需要,
當然可以用其他的下标。
關于菜單的動态建立和修改,下面的連結絕對值得一看:
http://blogs.msdn.com/johnkenn/archive/2005/08/22/454858.aspx
聲明一個兩個按鈕的菜單:
IDR_BUTTON_BUTTON SHMENUBAR DISCARDABLE
BEGIN
0, 2,
I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU,
I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU,
END
聲明一個左邊是按鈕,右邊是空白的菜單:
IDR_BUTTON_NONE SHMENUBAR DISCARDABLE
BEGIN
0, 1,
I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU,
END