Symbian菜单:创建一个最简单的菜单

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 文件

    1. 先写 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 对像
    2. 写 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_PANE 只需要指定 items 就行了, items 代表菜单项的集合,由 MENU_ITEM 组成
      MENU_ITEM 中的 commmand 是指这个菜单所关联的命令(在 hrh 文件中的enum值),txt是显示的文本,如果有子菜单则用 cascade 指出来
    3. 写好 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

原文地址:https://www.cnblogs.com/zziss/p/1661183.html