Symbian C++ 标题面板

 一般情况下,标题面板显示应用程序的名字,但可以更改为自定义的标题,也可以改成一副图像,如果选择的标题过长以致超过了行宽,则此标题分为两行显示,如果两行也无法容纳,则会截断次标题,也可以把标题设成空字符串,此时将不显示标题。

 

   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;
    }
 };
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值