今天花费了挺长时间在这个内容上,主要是因为CAknDialog这个类并没有一个明显的加载及响应菜单的方法,而且网络上面很多资料都是用了系统默认的R_AVKON_SOFTKEYS_OPTIONS_EXIT,确实算不上定制,所以现在做一个记录,希望对遇到相同问题的人能有所帮助
这里要实现的是左右软键以及菜单项的全部定制以及响应。
如果表单想要的左右软件分别为"left” 和"right", left对应的菜单项包括''Command1" "Command2"。那么相关的几个文件中的代码段如下。其中省略了相关的整形和字符串值的定义。
1、rss文件
RESOURCE DIALOG r_my_dialog
{
flags = EEikDialogFlagNoDrag | EEikDialogFlagModeless; //自己选择
buttons = r_my_softkeys_left_right;
form = r_my_form;
}
RESOURCE CBA r_my_softkeys_left_right
{
buttons =
{
CBA_BUTTON { id = EMyCommandLeft; txt = string_r_my_softkey_right; }, //其中整形值和字符串自己
CBA_BUTTON { id = EMyCommandRight; txt = string_r_my_softkey_left; } //在hrh和rls文件中定义
};
}
RESOURCE MENU_BAR r_my_menubar
{
titles =
{
MENU_TITLE
{
menu_pane = r_my_menu_pane;
}
};
}
RESOURCE MENU_PANE r_my_menu_pane
{
items =
{
MENU_ITEM
{
command = EMyCommand1;
txt = string_r_my_menu_command1;
},
MENU_ITEM
{
command = EMyCommand2;
txt = string_r_my_menu_command1;
}
};
}
RESOURCE FORM r_my_form
{
……
}
2、CMyForm文件
CMyForm直接继承于CAknForm。
CAknView的ConstructL()函数带了一个表示MenuBar的参数,但是在这里不需要,直接空着就好了,关键是OktoExitL 和 DynInitMenuPaneL两个函数
TBool CMyForm::OkToExitL( TInt aButtonId )
{
if( aButtonId == EMyCommandLeft )
{
CAknDialog::DisplayMenuL();
return EFalse;
}
else if( aButtonId == EMyCommandRight )
{
……
return EFalse;
}
return CAknDialog::OkToExitL( aButtonId );
}
这块是关键
void CMyForm::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
{
if ( aResourceId == R_AVKON_FORM_MENUPANE )
{
/* 添加菜单项*/
aMenuPane->AddMenuItemsL( R_MY_MENU, 0 );
/* 隐藏掉所有表单默认的菜单项*/
aMenuPane->SetItemDimmed( EAknFormCmdEdit, TRUE );
aMenuPane->SetItemDimmed( EAknFormCmdSave, TRUE );
aMenuPane->SetItemDimmed( EAknFormCmdAdd, TRUE );
aMenuPane->SetItemDimmed( EAknFormCmdLabel, TRUE );
aMenuPane->SetItemDimmed( EAknFormCmdDelete, TRUE );
}
else
{
CAknForm::DynInitMenuPaneL( aResourceId, aMenuPane );
}
}
重载ProcessCommandL函数
void CMCULoginForm::ProcessCommandL( TInt aCommandId )
{
switch( aCommandId )
{
case ECommand1: //响应菜单项Command1
……
break;
……
}
CAknDialog::HideMenu();
}
这样,一个自定义菜单的表单就实现了,希望对您有所帮助