MFC在状态栏中使用进度条控件



在状态栏上使用进度条

原理: 状态栏是个窗口,进度条将父窗口设置为状态栏的某一分区即可

步骤:

0. 建立MFC对话框程序

1. 增加头文件,CProgressCtrl需要使用

2. 在类中声明2个控件:状态栏 + 进度条(进度条在资源编辑器中创建)

3. 进度条是资源,有ID,需要对象数据交换

4. 创建、布置状态栏 (在初始化对话框函数中)

5. 设置状态栏的某一分区为进度条父窗口

6. 使用定时器让进度条动起来


运行显示:

MFC在状态栏中使用进度条控件_第1张图片


主要代码:

1-2-3

#include  //包含头文件

    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);







你可能感兴趣的:(Win32,&,MFC,状态栏,进度条,MFC)