zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    }

  • 相关阅读:
    Shell 字符串处理
    Shell 变量替换及测试
    ARTS(一)
    instanceof & isAssignableFrom的异同
    mysql 分组排序取最值
    guava-retrying 源码解析(阻塞策略详解)
    guava-retrying 源码解析(时间限制策略)
    guava-retrying 源码解析(停止策略详解)
    guava-retrying 源码解析(等待策略详解)
    guava-retrying 源码解析(导入项目)
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1808870.html
Copyright © 2011-2022 走看看