首先用资源编辑器创建一个简单的菜单:
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