Symbian菜单:创建一个最简单的菜单
菜单由 MENU_BAR,MENU_TITLE,MENU_PANE,MENU_ITEM 组成
MENU_TITLE 由 MENU_PANEL 组成 ,MENU_PANE 由 MENU_ITEM 组成,可以把相似的功能菜单放到同一个 MENU_PANE 中
而 MENU_TITLE 就是一级菜单,可以由多个 MENU_TITLE 组成一级菜单,而每一个 MENU_PANE又可以是某个 MENU_ITEM的子
菜单,通过 MENU_ITEM 的 cascade 关联起来,有点绕,但动手操作一下就明白了
第一步:写菜单命令
在 hrh 文件中写
enum TMenuGames
{
EMenu1CmdNewGame = 0x6000,
EMenu1CmdPlayer,
EMenu1CmdOnePlayer,
EMenu1CmdTwoPlayer
};
这里需要注意的是 hrh 文件只写 enum 类型,容易出错的地方在 “}”的结尾一定要加上“;”号,我第一次没有加上怎么运行都报错
第二步: 写 loc 文件
loc 文件定义了菜单的文本显示
#define qtn_menu_new_game "New Game"
#define qtn_menu_one_player "One Player"
#define qtn_menu_two_player "Two Player"
#define qtn_menu_player "Player"
这里同样需要注意,第一次写成了 #define qtn_menu_new_game = "New Game" 多了一个 “=”号,所以编译时提示找到不 label 的错误
第三步:写 rss 文件
-
先写 MENU_BAR
RESOURCE MENU_BAR r_menubar{titles={MENU_TITLE { menu_pane=r_gamePlayPane;txt=""}};
}
需要注意的是 titles 的 “{}”后要添加上“;”,这里的 MENU_TITLE 可以写多个,写多个则会把每个 MENU_TITLE关联的 MENU_PANE中的菜单做为一级菜单,menu_pane 指定一个 MENU_PANE 对像 -
写 MENU_PANE
RESOURCE MENU_PANE r_gamePlayPane
{
items=
{
MENU_ITEM { command = EMenu1CmdPlayer; txt = qtn_menu_player;cascade=r_gamePlayers;},
MENU_ITEM { command=EAknCmdExit; txt=qtn_appl_exit;}
};
}
RESOURCE MENU_PANE r_gamePlayers
{
items=
{
MENU_ITEM { command = EMenu1CmdOnePlayer;txt=qtn_menu_one_player;},
MENU_ITEM { command = EMenu1CmdOnePlayer;txt=qtn_menu_two_player;}
};
}
MENU_ITEM 中的 commmand 是指这个菜单所关联的命令(在 hrh 文件中的enum值),txt是显示的文本,如果有子菜单则用 cascade 指出来 -
写好 menu_bar 的资源了,然后该把它放到系统中让它显示出来了。
RESOURCE EIK_APP_INFO
{
hotkeys = r_menu1_hotkeys;
menubar = r_gameMenu;
cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
}
运行程序就看到效果了
总结,在写这个资源时,一直编译不过,第一次错误是 loc 文件写错了,第二次是 hrh 忘了加 “;”号了,第三次是 MENU_ITEM 写成 MENU_ITME了,结果第三次没有报错,一打开程序就出错,后来一点点排除才找到错误
安平2009@原创
qi_jianzhou@126.com