今天花費了挺長時間在這個內容上,主要是因為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();
}
這樣,一個自訂菜單的表單就實現了,希望對您有所協助