无论是在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);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/flashtao613/archive/2009/05/07/4157893.aspx