Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2110908
  • 博文数量: 413
  • 博客积分: 10926
  • 博客等级: 上将
  • 技术积分: 3862
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-09 18:14
文章分类

全部博文(413)

文章存档

2015年(5)

2014年(1)

2013年(5)

2012年(6)

2011年(138)

2010年(85)

2009年(42)

2008年(46)

2007年(26)

2006年(59)

分类:

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的定义可参照,有以下几种, 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,它们定义在中,有下列几种: 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。比较复杂的是导航面板,将另文介绍。

阅读(2842) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~