Symbian 面板之状态面板(StatusBar)(ZT)

 

 

 

 

转载自:http://hi.baidu.com/richiechyi/blog/item/f4bd13a4032e1bf39152ee6d.html

Symbian 面板之状态面板(StatusBar)(ZT)

面板分为状态面板、主面板和软键面板。其中以针对状态面板的操作为主。

状态面板分为下列子面板:标题面板、上下文面板、导航面板、信号面板、电池面板和通用指示符面板。

要操作状态面板,首先应该通过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的定义可参照<avkon.rsg>,有以下几种, R_AVKON_STATUS_PANE_LAYOUT_IDLE,R_AVKON_STATUS_PANE_LAYOUT_USUAL, R_AVKON_STATUS_PANE_LAYOUT_POWER_OFF_RECHARGE, R_AVKON_STATUS_PANE_LAYOUT_EMPTY等。

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,它们定义在<avkon.hrh>中,有下列几种: EEikStatusPaneUidSignal(信号面板),EEikStatusPaneUidBattery(电池面板), EEikStatusPaneUidContext(上下文面板),EEikStatusPaneUidTitle(标题面板), EEikStatusPaneUidNavi(导航面板),EEikStatusPaneUidIndic, EEikStatusPaneUidMessage,EEikStatusPaneUidClock。

TPaneCapabilities PaneCapabilities(TPaneId aPaneId)方法获取子面板的相关信息。TPaneCapabilities 是CEikStatusPaneBase的嵌套类,有IsPresent(),IsAppOwned(),IsInCurrentLayout()等方法。IsPresent()检查标题面板是否存在;IsAppOwned()检查面板是否能被应用程序更改;IsCurrentLayout()检测面板是否为当前面板布局的一部分。

一旦确定了面板存在并可修改,调用CCoeControl* CEikStatusPaneBase::ControlL(TPaneId aPaneId)得到子面板的指针,然后即可对其进行操作。关于标题面板和上下文面板的操作均较简单,可参照SDK中CAknTitlePane和 CAknContextPane。比较复杂的是导航面板,将另文介绍。

你可能感兴趣的:(layout,Class,Symbian,电话)