windows mobile 中软键菜单的格式

    技术2022-05-11  14

    首先用资源编辑器创建一个简单的菜单:

    IDR_MENU MENU BEGIN    POPUP "帮助"    BEGIN        MENUITEM "关于",                          IDM_HELP_ABOUT    ENDEND

    这个菜单只包括一个弹出菜单“帮助”,弹出后只有一个菜单项“关于”。

     

    为了声明或者创建软键菜单有两种方法,一是在 *.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 DISCARDABLEBEGIN

    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 DISCARDABLEBEGIN    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 DISCARDABLEBEGIN    0, 1,    I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU,END

     


    最新回复(0)