Symbian 進度條控制項

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.