MFC在狀態列中使用進度條控制元件

Aousdu發表於2017-03-15


在狀態列上使用進度條

原理: 狀態列是個視窗,進度條將父視窗設定為狀態列的某一分割槽即可

步驟:

0. 建立MFC對話方塊程式

1. 增加標頭檔案,CProgressCtrl需要使用

2. 在類中宣告2個控制元件:狀態列 + 進度條(進度條在資源編輯器中建立)

3. 進度條是資源,有ID,需要物件資料交換

4. 建立、佈置狀態列 (在初始化對話方塊函式中)

5. 設定狀態列的某一分割槽為進度條父視窗

6. 使用定時器讓進度條動起來


執行顯示:


主要程式碼:

1-2-3

#include <afxcmn.h> //包含標頭檔案

    CStatusBar m_status;
    CProgressCtrl m_progress;

DDX_Control(pDX, IDC_PROGRESS1, m_progress); //物件資料交換

4-5

    m_status.Create(this);	//建立狀態列
    UINT arr[] = {1001,1002,1003};
    m_status.SetIndicators(arr, sizeof(arr)/sizeof(UINT)); 

    m_status.SetPaneInfo(0, 1001, 0, 100);	//設定分割槽ID及大小
    m_status.SetPaneInfo(1, 1002, 0, 200);
    m_status.SetPaneInfo(2, 1003, 0, 200);

    m_status.SetPaneText(0, _T("GOGO"));
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

    RECT rt;
    m_status.GetItemRect(2, &rt);	//獲取狀態列所需要區的視窗矩形
    m_progress.SetParent(&m_status);	//設定狀態列為父
    m_progress.MoveWindow(&rt);
    m_progress.ShowWindow(1);

6

//訊息對映巨集:     ON_WM_TIMER()
//類內宣告函式:    afx_msg void OnTimer(UINT nID);
//類外實現函式:
void MyDialog::OnTimer(UINT nID)
{
    static int iPos = 0;
    iPos += 5;
    if (iPos > 100)     iPos = 0;
    m_progress.SetPos(iPos);
    return CDialog::OnTimer(nID);
}

7. 不要忘記呼叫SetTimer觸發定時器

SetTimer(1,100,NULL);







相關文章