symbian 进度条 processbar

news/2024/7/7 12:21:41

 进度条(Progressbar)控件用于显示某个持续时间比较长的操作进度,例如邮件接受进度和文件下载进度大牛股。本节的ProgressBar示例程序显示了一个简单的进度条,进度随着事件增长,ProgressBar示例程序的运行界面如下如所示:

           

                                                                    CEikProgressInfo类的基类

进度条的类是在头文件eikprogi.h中定义的CEikProgressInfo。该类派生自CEIBorderedControl类。

1:在资源文件中定义进度条

进度条的资源类型在eikon.rh文件中定义:

STRUCT PROGRESSINFO

{

   WORD  text_type = 0;

   WORD  splits_in_block = 0;

   LONG  finalval;

   LONG  width = 120;

   LONG  height = 10;

}

  text_type是进度条上的文本显示设置,splits_in_block是进度的每一步在显示的条格数,这两个值在S60 2.X版本的SDK中不再支持。

  finalval设置了进度条一共包含多少步,它是进度条资源文件中必须定义的值。width值设置进度条的宽度,height值设置进度条的高度,这两个值都是以像素为单位。

  ProgressBar示例程序中,进度条的资源定义如下:

  RESOURCE PROGRESSINFO r_progress_bar

  {

   text_type = 0;

   splits_in_block = 0;

   finalval = 20;

   width = 120;

   height = 20;

  }

2: 构造进度条控件

   首先在progressBar示例程序的主控件CProgressBarContainer的头文件中,定义进度条控件:

  class  CEikProgressInfo;

  class  CProgressBarContainer:public CCoeControl, MCoeControlObserver

  {

       private:

           CEikProgressInfo*   iPbar;

  }

  构造进度条控件的过程与构造滑块类似,都是在主控件的ConstructL()函数中,从资源定义中构造,参考代码如下:

#include <eikprogi.h>//使用CEikProgressInfo

#include <ProgressBar.rsg>//使用R_PROGRESS_BAR资源

#include <coemain.h>//使用iCoeEnv

#include <barsread.h>//使用TResourceReader

 

void CProgressBarContainer::ConstructL(const TRect& aRect)

{

   TResourceReader   reader;

   iCoeEnv->CreateResourceResderLC(reader, R_PROGRESS_BAR);

   iPBar = new(ELeave)CEikProgressInfo();

   iPBar = new(ELeave)CEikProgressInfo();

   CleanupStack::PopAndDestroy();

   iPbar->SetPosition(TPoint(10,40));

   iPbar->SetContainerWindowL(*this);

}

3: 调整进度条的进度

   CEikProgressInfo类提供了多个设置进度的函数,比较常用的是IncrementAndDraw()函数和SetAndDraw()函数,它们的定义如下:

   void  IncrementAndDraw(TInt aInc);

   void  SetAndDraw(TInt aValue);

IncrementAndDraw()函数的作用是将进度条增加aInc步,并刷新进度条显示。aInc可以是负数,此时进度条的进度会向后跳帧 gdang进度条值达到或者超过finalval定义的值后,进度条上显示为最大的进度。SetAndDraw()函数的作用是将当前进度设置成参数 aValue代表的一个绝对的值。

  ProgressBar示例程序中使用周期定时器CPeriodic控制进度条的前进过程,CPeriodic可以产生周期性定时器事件,示例程序在定时器事件出发时增加进度条的进度。

  首先在CProgressBarContainer类中定义定时器对象和相关处理函数,参考代码如下:

  class CProgressBarContainer:public CCoeControl, MCoeControlObserver

  {

   private:

      static TInt  Period(TAny* aPtr);

      void  DoStep();

      CPeriodic*  iPeriodic Timer;    

  }

  其中iPeriodicTimer是周期定时器CPeriodic对象,Period()函数必须是一个静态函数,它作为定时器事件触发时的回调函 数,DoStep()函数是实际的增加进度的函数。这两个函数在CProgressBarContainer.cpp文件中实现,代码如下:

void  CProgressBarContainer::DoStep()

{

 iPBar->IncrementAndDraw();

}

TInt CProgressBarContainer::Period(TAny* aPtr)

{

  ((CProgressBarContainer*)aPtr)->DoStep();

  return TRUE;

}

   启动定时器之前首先构造定时器对象,然后使用Start()函数启动定时器,Start()函数的参数中,除了指定周期定时的事件外,还要指定定时器事件 触发时需要调用过的回调函数,这里是CProgressBarContainer类的静态函数Period(),参考代码如下:

iPeriodicTimer = CPeriodic::NewL(CActive::EPriorityStandard);

iPeriodicTimer->Start(500000,200000,TCallBack(CProgressBarContainer::Period,this));

   需要注意的是,在CProgressBarContainer的析构函数中,除了要删除进度条控件外,还要删除定时器对象,参考代码如下:

   CProgressBarContainer::~CprogressBarContaier()

   {

    delete iPBar;

    if(iPeriodicTimer != NULL)

    {

      iPeriodicTimer->Cancel();

    }

    delete iPeriodicTimer;

   }


http://www.niftyadmin.cn/n/2308412.html

相关文章

amd为什么还用针脚_英特尔CPU早就取消针脚了,AMD为什么还不取消?

英特尔和AMD竞争了这么多年&#xff0c;AMD唯一改变最小的恐怕就是接口了&#xff0c;到现在仍然坚持使用“老旧”的针脚式接口&#xff0c;而英特尔早在十多年以前就早早抛弃了针脚&#xff0c;使用了LGA触点式接口&#xff0c;当时人们还觉得AMD处理器不久后也将跟随英特尔全…

干活的不如写ppt的吗_吃相太难看:咱基层干活的不如写PPT的!

藏蓝观察社当下警事 警察心声 2018年8月27日晚&#xff0c;江苏省发生了著名的“昆山反杀案”&#xff0c;此案引发了全国热议&#xff0c;“正当防卫”的话题再次被摆到了桌面上。六哥一直在最基层工作&#xff0c;当然知道出了这样的“命案”一线警察将会又是多少的灯火通明的…

symbian在Series60中创建自定义列表(LISTBOX)

适用版本&#xff1a; S60 2nd Edition FP3, S60 3rd Edition 1&#xff0e;为什么要自定义 列表是在S60开发中经常用到的一个控件&#xff0c;在SDK中S60已经很周到的为我们提供了许多预定义的列表类型&#xff0c;其中包括 CAknSingleGraphicStyleListBox、CAknDoubleStyl…

16进制 es6_ES6数字操作

// 二进制声明let binary 0B010101console.log(binary) //21// 八进制声明let octal 0O666console.log(octal) //438//判断是否是数字let a 11console.log(Number.isFinite(a)) //true//判断是否是整数let b 11console.log(Number.isInteger(b)) //true//判断是否是浮点数l…

变形 圆形_圆形桥梁橡胶气囊充气芯模

18330875558 圆形桥梁橡胶气囊充气芯模充气芯模橡胶气囊桥梁充气芯模圆形桥梁橡胶气囊充气芯模 充气橡胶芯模 桥梁橡胶充气芯模。主要用于公路桥梁混凝土前张法后张法梁的浇筑成型工程。也被涵洞排污工程所采用。 使用圆形桥梁橡胶气囊圆形桥梁橡胶气囊充气芯模的特点1.木模的缺…

symbian Carbide.c++ IDE的常用快捷键和技巧

Carbide.c 是Nokia专门为Symbian系统开发提供的一个集成开发工具。此开发工具其实是基于Eclipse平台构建((我的理解应该是Eclipse CDT Nokia plugin))。熟悉Eclipse的都知道Eclipse的功能强大和易用性&#xff0c;在Eclipse上的大部分经验技巧都能在 Carbide.c 使用,由于Ecli…

symbian 显示位图和SVG图

显示位图和SVG图 先打包&#xff0c;在加载 &#xff0c;最后绘画 打包位图资源 &#xff1a; 先把图片放到指定文件 夹&#xff0c;然后把大包脚本加入到程序 的mmp文件中&#xff08;添加在end前的最后&#xff09; START BITMAP graphic_bmp.mbm HEADER TARGETPA…

wireshark python数据解析_python构造wireshark可以解析的LTE空口数据

Wireshark是可以解析LTE的空口数据。但是在wireshark的实现中&#xff0c;这些数据都是被封装到UDP报文中。然后根据wireshark的格式文件对LTE的数据加上头信息。头信息的定义参考附件packet-mac-lte.h文件大致结构如下&#xff1a;typedef struct mac_lte_info{/* Needed for …