动态菜单

[edit] 动态地决定某个菜单项的显示与否
在S60平台上处理菜单项的显示与隐藏是十分容易的事情,我们只需要在应用程序的APPUI层继承DynInitMenuPaneL函数,在这个函数中处理菜单项的现实即可。下面的代码演示了如何在实现DynInitMenuPaneL()这个函数:
void CMyAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
  {
 
    if (R_MAIN_MENU == aResourceId)
      {
        if (iRegistered)
          {
            aMenuPane->SetItemDimmed(ERegisterCmd, ETrue);
          }
 
      }
    else if (R_ADD_MENU == aResourceId)
      {
        CEikMenuPaneItem::SData data;
        data.iText.Copy(KtxAddCommand);
        data.iCommandId = EAddCommand;
        data.iCascadeId=0;
        data.iFlags=0;
        data.iExtraText=KNullDesC;
 
        aMenuPane->AddMenuItemL(data);
      }
  }
请注意,当你修改菜单窗口的时候,我们需要确认需要修改的菜单的确是当前显示的菜单窗口;进行此项确认,仅仅需要检查函数参数的资源ID和我们需要修改的菜单的资源ID是否一致即可。另外还要注意MENU_PANE的资源ID和MENU_BAR的资源ID并不是一致的,这点要特别注意。
这个DynInitMenuPaneL函数是在菜单窗口被显示之前被调用的,所以调用SetItemDimmed()函数,将某项菜单的隐藏值设置为ETrue的话就可以将某一个菜单项从菜单列表中隐藏起来,这样的话用户就等于无法使用该菜单项了。
如果你想在菜单列表中添加某一个菜单项,你可以在DynInitMenuPaneL函数中,创建一个CEikMenuPane类的对象,然后如下例所示,将这个菜单项添加到菜单列表中。
菜单项和菜单窗口的资源文件定义如下:
RESOURCE MENU_BAR r_main_menubar
  {
    titles =
      {
        MENU_TITLE
          { menu_pane = r_main_menu; txt = "Options";}
      };
  }
RESOURCE MENU_PANE r_main_menu
  {
    items =
      {
        MENU_ITEM
          { command = ERegisterCmd; txt= "Register";},
        MENU_ITEM
          { command = ENMsg;cascade=r_add_menu; txt="Add";},
        MENU_ITEM
          { command = EAbout; txt="About";}
      };
  }
 
RESOURCE MENU_PANE r_add_menu
  {
    items =
      {
        MENU_ITEM
          { command = EAnotherCmdA; txt= "Another A";},
        MENU_ITEM
          { command = EAnotherCmdB; txt= "Another B";}
      };
  }
[edit] 动态地更换整个选项菜单
如果你希望更换整个左软键的选项菜单中的内容,你可以在代码中使用下面的函数:
iEikonEnv->AppUiFactory()->MenuBar()->SetMenuTitleResourceId(R_ADD_MENU);
但是请注意,使用这个函数的时候,一定不要在DynInitMenuPaneL()函数中进行钓用,否则将会导致十分奇怪的后果 ;P 。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值