Symbian C++ 標題面板)

來源:互聯網
上載者:User

一般情況下,標題面板顯示應用程式的名字,但可以更改為自訂的標題,也可以改成一副映像,如果選擇的標題過長以致超過了行寬,則此標題分為兩行顯示,如果兩行也無法容納,則會截斷次標題,也可以把標題設成Null 字元串,此時將不顯示標題。

   TitlePane執行個體顯示了如何更改標題面板的文本和怎樣在標題面板中顯示映像,以及如何在資源檔中靜態定義標題面板。

1.更改標題面板的文本

void CTitlePaneAppUi::HandleCommandL(TInt aCommand)
{
switch (aCommand)
  {
  case EEikCmdExit:
  case EAknSoftkeyExit:
   Exit();
   break;
  //更改標題面板的文本
  case ETitlePaneCmdTitleText:
   {
   //定義標題面板ID
   TUid titlePaneUid;
   titlePaneUid.iUid = EEikStatusPaneUidTitle;
    //擷取狀態面板指標
   CEikStatusPane* statusPane = this->StatusPane();
   /**
    * 通過狀態面板的PaneCapabilities方法並為它傳遞一個標題面板ID,
    * 然後該方法返回一個TPaneCapabilities對象。
    * TPaneCapabilities是CEikStatusPane的一個內部類或嵌套類,
    * 它能描述子面板(如標題面板、上下文面板、導航面板、訊號面板等)
    * 的一些狀態(如該子面板是否存在於狀態面板中)和能力(如子面板是否能被應用程式更改)。
    *
   CEikStatusPane::TPaneCapabilities subPane =
     statusPane->PaneCapabilities(titlePaneUid);
   /**
    * IsPresent()判斷標題面板是否存在
    * IsAppOwned()檢查標題面板是否能被引用程式更改
    *
   if(subPane.IsPresent() && subPane.IsAppOwned())
    {
    //狀態面板雖然返回了CAknTitlePane的指標,但並未傳遞所屬權,所以不需要使用清除棧
    CAknTitlePane* titlePane = (CAknTitlePane*)statusPane->ControlL(titlePaneUid);
    //從資源檔中載入標題文本
    HBufC* titleText = StringLoader::LoadLC(R_TITLEPANE_TITLE_TEXT);
    /**
     * 可以使用SetText()設定標題文本,
     * 但SetText()方法會取得其參數(titleText指標)的所屬權,所以不需要刪除titleText指標。
     * 也可以使用SetTextL()設定標題文本,
     * 但SetTextL()方法會複製其參數,不會取得該參數的所屬權,所以需要自行刪除titleText指標。
     *
     * 注意:使用SetTextL()方法時,傳入的參數應該為*titleText而不是titleText->Des()
     * 因為SetTextL()方法的參數為const TDesC&類型,是不可被修改的。
     *
    titlePane->SetTextL(*titleText);
    CleanupStack::PopAndDestroy(titleText);
    }
   break;
   }
  default:
   Panic(ETitlePaneUi);
   break;
  }
}

2.重設標題面板的預設值

void CTitlePaneAppUi::HandleCommandL(TInt aCommand)
{
switch (aCommand)
  {
  case EEikCmdExit:
  case EAknSoftkeyExit:
   Exit();
   break;

  //重設標題面板的預設值
  case ETitlePaneCmdDefaultTitle:
   {
   TUid titlePaneUid;
   titlePaneUid.iUid = EEikStatusPaneUidTitle;
   //擷取狀態面板
   CEikStatusPane* statusPane = this->StatusPane();
   CEikStatusPane::TPaneCapabilities subPane =
     statusPane->PaneCapabilities(titlePaneUid);
   if(subPane.IsPresent() && subPane.IsAppOwned())
    {
    CAknTitlePane* titlePane = (CAknTitlePane*)statusPane->ControlL(titlePaneUid);
    //重設標題面板的預設值
    titlePane->SetTextToDefaultL();
    }
   break;
   }
  default:
   Panic(ETitlePaneUi);
   break;
  }
}

3.在標題面板中顯示映像

void CTitlePaneAppUi::HandleCommandL(TInt aCommand)
{
switch (aCommand)
  {
  case EEikCmdExit:
  case EAknSoftkeyExit:
   Exit();
   break;

  //在標題面板中顯示映像
  case ETitlePaneCmdTitleImage:
   {
   _LIT(KTitleBitMapFile, "\\system\\apps\\titlepane\\TitlePane.mbm");
   TUid titlePaneUid;
   titlePaneUid.iUid = EEikStatusPaneUidTitle;
   CEikStatusPane* statusPane = this->StatusPane();
   CEikStatusPane::TPaneCapabilities subPane =
     statusPane->PaneCapabilities(titlePaneUid);

   //如果可以訪問標題面板
   if(subPane.IsPresent() && subPane.IsAppOwned())
    {
    CAknTitlePane* titlePane =
     (CAknTitlePane*)statusPane->ControlL(titlePaneUid);
    CFbsBitmap* bitmap = iEikonEnv->CreateBitmapL(KTitleBitMapFile, EMbmTitlepaneTitle);

    //設定標題面板的映像
    titlePane->SetPicture(bitmap);
    }
   break;
   }
  default:
   Panic(ETitlePaneUi);
   break;
  }
}

4. 在資源檔中更改標題面板的文本和映像

RESOURCE EIK_APP_INFO
{
status_pane = r_titlepane_status_pane;
menubar = r_titlepane_menubar;
cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
}

//定義包含文本的標題面板
RESOURCE TITLE_PANE r_titlepane_title_pane
{
//標題文本
txt = qtn_titlepane_title_text;
}

//定義包含映像的標題面板
RESOURCE TITLE_PANE r_titlepane_title_pane
{
//標題映像
bmpid = EMbmTitlepaneTitle;
// bmpmaskid = EMbmTitlepaneMaskTitle
bmpfile = "\\system\\apps\\titlepane\\TitlePane.mbm";
}

//定義狀態面板
RESOURCE STATUS_PANE_APP_MODEL r_titlepane_status_pane
{
panes =
{
   SPANE_PANE
    {
    id = EEikStatusPaneUidTitle; //avkon.hrh 810
    type = EAknCtTitlePane;  //avkon.hrh 415
    resource = r_titlepane_title_pane;
    }
};
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.