Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

动态菜单

From Wiki
Jump to: navigation, search
Article Metadata

文章
kcomex 在 02 Apr 2007 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

动态地决定某个菜单项的显示与否

在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";}
};
}

动态地更换整个选项菜单

如果你希望更换整个左软键的选项菜单中的内容,你可以在代码中使用下面的函数:

iEikonEnv->AppUiFactory()->MenuBar()->SetMenuTitleResourceId(R_ADD_MENU);

但是请注意,使用这个函数的时候,一定不要在DynInitMenuPaneL()函数中进行钓用,否则将会导致十分奇怪的后果 ;P 。

This page was last modified on 15 December 2011, at 10:38.
108 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×