symbian自定义动态菜单

来源:互联网 发布:剑桥商务英语 知乎 编辑:程序博客网 时间:2024/04/28 10:53

无论是在UI还是在Container中,只需要继承DynInitMenuPaneL函数就可以实现动态菜单的效果。

首先要在rss中菜单资源进行改变MENU_PANE类型函数里定义出所有需要显示的项。然后在RESOURCE EIK_APP_INFO函数里,将该MENU_PANE所从属的menubar引入,并添加:

cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;语句。

同时也可以根据需要添加多个MENU_PANE项,达到多级菜单的效果

 

接着在DynInitMenuPaneL函数实现菜单改变,例如,可以设置两个成员变量,分别设置相反值,达到动态位置不变值改变的效果
code:
ConstructL()
{
 iMenu1 = EFalse;
 iMenu2 = ETrue;
}

HandleCommandL(TInt aCommand)
{
case ECommand1:
iMenu1 = ETrue;
iMenu2 = EFalse;

case ECommand2:
iMenu1 = EFalse;
iMenu2 = ETrue;
}

DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
//每一次的参数aResourceId都不一样。这是遍历你在rss里定义的MENU_PANE。
{
 if(R_MENU == aResourceId)//所以这里一定要用上if判断
       {       
       aMenuPane->SetItemDimmed(ECommand1, iMenu1);//SetItemDimmed()在各个平台上的实际效果各不相同
       aMenuPane->SetItemDimmed(ECommand2, iMenu2);//S60平台上SetItemDimmed()会隐藏菜单项.UIQ会使菜单变灰而失效
       }
}

如果希望更换整个左软键的选项菜单中的内容,可以再DynInitMenuPaneL外使用
iEikonEnv->AppUiFactory()->MenuBar()->SetMenuTitleResourceId(R_ADD_MENU);

原创粉丝点击