CAknForm表單定製菜單方法

來源:互聯網
上載者:User

今天花費了挺長時間在這個內容上,主要是因為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();

}

 

這樣,一個自訂菜單的表單就實現了,希望對您有所協助

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.