进度条(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