天天看點

windows mobile 中軟鍵菜單的格式

首先用資源編輯器建立一個簡單的菜單:

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

繼續閱讀