动态菜单是指程序运行过程时菜单项的显示数目可以发生变化。Symbian中动态菜单是在AppUi的成员函数 DynInitMenuPaneL()中实现菜单在加载前的初始化工作。它包括两个参数--aResourceId(当前激活的菜单id)和 aMenuPane(当前菜单的指针)。
任何菜单都是CEikMenuPane类的对象,aMenuPane就是指向CEikMenuPane的指针。DynInitMenuPaneL()是 MEikMenuObserver混合类的成员,AppUi继承该混合DynInitMenuPaneL()函数来做菜单初始化的工作。实现这个函数时, 需要在AppUi的.cpp文件中加上eikmenup.h头文件,在.mmp文件的LIBRARY后面添上eikcoctl.lib库文件。
如果需要将菜单隐藏或使之暂时不可用,可以在DynInitMenuPaneL()函数中添加如下所示的代码:
void CSampleControlAppUi::DynInitMenuPaneL(TInt aResourceId,
CEikMenuPane* aMenuPane)
{
if (aResourceId == R_SAMPLECONTROL_MENU)
{
aMenuPane->SetItemDimmed(ESampleControlCmdAppMenu2, ETrue);
}
}