一般情況下,標題面板顯示應用程式的名字,但可以更改為自訂的標題,也可以改成一副映像,如果選擇的標題過長以致超過了行寬,則此標題分為兩行顯示,如果兩行也無法容納,則會截斷次標題,也可以把標題設成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;
}
};
}