方案二:
首先在rss文件中添加菜单资源和对话框资源
RESOURCE MENU_BAR r_demo_menu_bar
{
titles =
{
MENU_TITLE
{
menu_pane = r_demo_menu;
}
};
}
RESOURCE MENU_PANE r_demo_menu
{
items =
{
MENU_ITEM
{
command = EDemoCmdTest;
txt = DEMO_TEXT;
}
};
}
RESOURCE DIALOG r_demo_dialog
{
……
buttons = R_AVKON_SOFTKEYS_OPTIONS_BACK;
……
}
然后实现一个从CAknDialog派生的对话框类,重写 OkToExitL()和ProcessCommandL()函数,用于显示菜单和命令响应。
TBool CDemoDialog::OkToExitL(TInt aKeycode)
{
TBool retVal = EFalse;
switch (aKeycode)
{
case EAknSoftkeyOptions:
DisplayMenuL();
retVal = EFalse;
break;
case EAknSoftkeyBack:
retVal = ETrue;
break;
default:
break;
}
return retVal; // ETrue Close the dialog.
}
void CDemoDialog::ProcessCommandL(TInt aCommandId)
{
HideMenu(); // hide the menu.
switch (aCommandId)
{
case EDemoCmdTest:
{
// Do something
}
break;
default:
break;
}
}
最后用如下方法创建对话框
CDemoDialog* demoDlg = new(ELeave) CDemoDialog;
CleanupStack::PushL(demoDlg );
// 将菜单资源传递给对话框
demoDlg ->ConstructL(R_DEMO_MENU_BAR);
CleanupStack::Pop(demoDlg);
// Run the dialog.
demoDlg ->ExecuteLD(R_SMSFILTER_CONFIGURATION_DIALOG);