全部博文(413)
分类:
2008-03-17 11:29:22
状态面板分为下列子面板:标题面板、上下文面板、导航面板、信号面板、电池面板和通用指示符面板。
要操作状态面板,首先应该通过CEikStatusPane* CAknAppUi::StatusPane()得到状态面板的指针。
CEikStatusPane提供了对状态面板进行操作的各种方法:
class CEikStatusPane : public CEikStatusPaneBase, public MCoeForegroundObserver;
Members
Defined in CEikStatusPane:
ApplyCurrentSettingsL(), HandleResourceChange(), MakeVisible(), NewL(), SetDimmed(), SetFaded(), ~CEikStatusPane()
Inherited from CBase:
operator new()
Inherited from CEikStatusPaneBase:
ContainerControlL(), ControlL(), Current(), GetShapeL(), IsDimmed(),
IsFaded(), IsVisible(), PaneCapabilities(), PaneRectL(), ReduceRect(),
SetFlags(), SetObserver(), SwapControlL(), SwitchLayoutL(),
TPaneCapabilities, WindowGroup()
Inherited from MCoeForegroundObserver:
HandleGainingForeground(), HandleLosingForeground()
1.可见性操作
CEikStatusPane* statusPane = StatusPane();
if (statusPane->CurrentLayoutResId() != R_AVKON_STATUS_PANE_LAYOUT_EMPTY)
{
statusPane->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_EMPTY);
}
else
{
statusPane->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
}
CurrentLayoutResId()返回当前布
局的资源ID,关于资源ID的定义可参照
SwitchLayoutL()把状态面板的布局更改为指定的资源ID。
注意,不应使用CEikStatusPane的IsVisible()和MakeVisible()来检查和设置面板的可见性,因为它们同时会隐藏电话拨入图标。
在对状态面板的子面板操作时,需要通过下面方法得到子面板(以更改标题面板文本为例):
TUid titlePaneUid;
titlePaneUid.iUid = EEikStatusPaneUidTitle;
CEikStatusPane* statusPane = StatusPane();
CEikStatusPaneBase::TPaneCapabilities subPane = statusPane->PaneCapabilities(titlePaneUid);
if (subPane.IsPresent() && subPane.IsAppOwned())
{
CAknTitlePane* titlePane = (CAknTitlePane*)statusPane->ControlL(titlePaneUid);
HBufC* titleText = StringLoader::LoadLC(R_HEWB_TITLE_TEXT);
titlePane->SetTextL(*titleText);
CleanupStack::PopAndDestroy(titleText);
}
要得到子面板,需要实现准备好子面板的ID,它们定义在
TPaneCapabilities PaneCapabilities(TPaneId aPaneId)方法获取子面板的相关信息。TPaneCapabilities 是CEikStatusPaneBase的嵌套类,有IsPresent(),IsAppOwned(),IsInCurrentLayout()等方 法。IsPresent()检查标题面板是否存在;IsAppOwned()检查面板是否能被应用程序更改;IsCurrentLayout()检测面板 是否为当前面板布局的一部分。
一旦确定了面板存在并可修改,调用CCoeControl* CEikStatusPaneBase::ControlL(TPaneId aPaneId)得到子面板的指针,然后即可对其进行操作。关于标题面板和上下文面板的操作均较简单,可参照SDK中CAknTitlePane和 CAknContextPane。比较复杂的是导航面板,将另文介绍。