進度條(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