Symbian 进度条控件

进度条(Progress Bars)用于显示正在进行的操作的状态,可提供用户程序运行的可视化反馈。

 

 

 

 

 

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

class CAirProgressAppView : public CCoeControl,public MCoeControlObserver
 {
public:
 // New methods

 static CAirProgressAppView* NewL(const TRect& aRect);

 static CAirProgressAppView* NewLC(const TRect& aRect);

 virtual ~CAirProgressAppView();

public:
 // Functions from base classes

 void Draw(const TRect& aRect) const;

 virtual void SizeChanged();

 virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent);

private:
 // Constructors
    CAirProgressAppView();
 
    static TInt  Period(TAny* aPtr);

    void  DoStep();
   
    void HandleControlEventL( CCoeControl* /*aControl*/,
                              TCoeEvent /*aEventType*/ );
private: // Functions from base classes
 //由于CEikProgressInfo属于控件,所以这两个函数一定要实现,否则无法在容器中显示控件

    TInt CountComponentControls() const;

    CCoeControl* ComponentControl( TInt aIndex ) const;
 
private:

    CEikProgressInfo*   iPbar;
    CPeriodic*  iPeriodicTimer;  

 };


void CAirProgressAppView::ConstructL(const TRect& aRect)
 {
 // Create a window for this application view
 CreateWindowL();

 TResourceReader reader;

 iCoeEnv->CreateResourceReaderLC(reader, R_PROGRESS_BAR);//读取资源文件,资源文件定义见下段代码

 iPbar = new(ELeave)CEikProgressInfo();

 iPbar->ConstructFromResourceL( reader );

 CleanupStack::PopAndDestroy();

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

 iPbar->SetContainerWindowL(*this);//设置为当前容器
 
 iPbar->SetExtent( TPoint(10, 40), TSize(120,20 ) );//用于显示边框

 //控件的生成要在ActivateL前完成
 SetRect(aRect);
 ActivateL();
 
 iPeriodicTimer = CPeriodic::NewL(CActive::EPriorityStandard);
 iPeriodicTimer->Start(500000,200000,TCallBack(CAirProgressAppView::Period,this));

 }

RESOURCE PROGRESSINFO r_progress_bar
 {

  finalval = 240;//finalval设置了进度条一共包含多少步,它是进度条资源文件中必须定义的值。

//width值设置进度条的宽度,height值设置进度条的高度,这两个值都是以像素为单位。
//这两个值出了可以在资源文件中定义外还可以在应用程序中通过CEikProgressInfo::SInfo 设置

  width = 120;
  height = 20;

 }

TInt CAirProgressAppView::Period(TAny* aPtr)
 {
 ((CAirProgressAppView*)aPtr)->DoStep();

   return TRUE;

 }

void CAirProgressAppView::DoStep()
 {
 iPbar->IncrementAndDraw(20);

// CEikProgressInfo类提供了多个设置进度的函数,比较常用的是IncrementAndDraw()函数和SetAndDraw()函数,
// IncrementAndDraw()函数的作用是将进度条增加aInc步,并刷新进度条显示。aInc可以是负数,此时进度条的进度会向后跳帧gdang进度条值达到

// 或者超过finalval定义的值后,进度条上显示为最大的进度。
// SetAndDraw()函数的作用是将当前进度设置成参数aValue代表的一个绝对的值。

 }

 

 

更详细信息可以参考sdk下的一个例子C:/Symbian/8.0a/S60_2nd_FP2_CW/Series60Ex/scroller

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值