【MFC】进度条:Progress Control控件

01、目录

02、Progress Control介绍

进度条对于我们而言,想必都很熟悉了,安装软件、游戏加载都会有进度条的身影。
今天我们就来学习学习:Progress Control控件——进度条。
如下所示:

在这里插入图片描述

关于拖拽的方法,这里不做介绍,重点聊聊常用的几个方法。

03、Progress Control相关函数

  1. create() ——创建Progress Control
    针对不是通过资源文件上拖拉进度条控件生成的进度条,需要用此函数创建一个。
  2. SetRange() —— 设置进度条范围
    设置进度条的起始值和终止值。(不管拖拽还是创建都要设置此,在初始化中)
  3. SetPos() —— 设置当前值
    设置进度条的当前位置(值)。
  4. OffSetPos() —— 偏移一段位置
    移动进度条一段距离(动态移动,如果不做延时,默认速度移动)
  5. SetStep() —— 设置步长
    设置进度条偏移一次的长度,一般与StepIt搭配使用
  6. StepIt() —— 更新步长位置
    按照步长来更新位置。
  7. GetPos() —— 得到当前值
    获得进度条当前值。

上述方法我会在下面例子中展示,就不举例了。

04、Progress Control示例

4.1 功能:按照固定步长一次增加1
CProgressCtrl *myProCtrl2 = (CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
myProCtrl2->SetRange(0,100);
for (int i = 0;i<100;i++)
{
//myProCtrl2->OffsetPos(1); //此句代码等同于下两句,以固定步长1更新显示,该功能也可以这样实现:myProCtrl2->SetPos(i); 
myProCtrl2->SetStep(1);
myProCtrl2->StepIt();
Sleep(100);
}
4.2 功能:按固定步长增加,并动态更新百分比
CProgressCtrl myProCtrl;
CRect rect,proRect;
GetClientRect(&rect);
proRect.left = rect.left + rect.Width()/2 - 100;
proRect.top = rect.top + rect.Height()/2 - 20;
proRect.right = rect.right - rect.Width()/2 + 100;
proRect.bottom = rect.bottom - rect.Height()/2 + 20;
//WS_CHILD|WS_VISIBLE|PBS_SMOOTHREVERSE 
myProCtrl.Create(WS_VISIBLE,proRect,this,99); //创建位置、大小
myProCtrl.SetRange(0,100);
int i;
for (i = 0; i < 100; i++)
{
myProCtrl.OffsetPos(1);
CString str;
str.Format(_T("%d%%"),i); //百分比
(GetDlgItem(IDC_STATIC1))->SetWindowText(str);
Sleep(100);
}
4.3 功能:搭配定时器,动态更新显示进度条
  1. 首先在初始化函数中设置范围和当前初始值

    
    CProgressCtrl* pProg = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS);
        pProg->SetRange(0, 100);
        pProg->SetPos(0);
        //也可关联控件变量
    
  2. 然后在开始按钮中设置定时器,如上图所示

    //设置定时器
        SetTimer(1, 100, NULL);
        //当开始的时候,按钮不可用
        CButton* pBtn = (CButton*)GetDlgItem(IDC_BUTTON1);
        pBtn->EnableWindow(FALSE);
    
  3. 然后在定时器函数设置进度条的实时位置

    void CMFCTESTDlg::OnTimer(UINT_PTR nIDEvent)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
     
        int iPos = 0;
        iPos = m_prog.GetPos();//获取当前进度条位置
        iPos += 1;
        m_prog.SetPos(iPos); 
        CString s1,s2;
        s1 = _T("%");
        s2.Format(_T("%d"), iPos);
        SetDlgItemText(IDC_STATIC_DISPLAY, s1 + s2);
        if (iPos == 100)//当达到100的时候就关闭定时器,并且事按钮可用,位置设为0
        {
            KillTimer(1);
            m_prog.SetPos(0);
            CButton* pBtn = (CButton*)GetDlgItem(IDC_BUTTON1);
            pBtn->EnableWindow(TRUE);
        }
        CDialogEx::OnTimer(nIDEvent);
    }
    

上面程序中的设置相加位置搞错了了,导致显示为 % xx,自行更改。

05、小结

Progress Control控件,做好了之后,感觉能够使自己的程序提升一个档次,所以说,学一下这个还是很有必要的。

要想自己的Progress Control控件更加棒,最好是根据某某某程序的执行时间来算出进度每增加1步长,用时多久,这样就更加精准,当然,固定执行也行,锦上添花罢了。

关于Progress Control就大致了解到这里了,多实践,相信大家很快就会掌握此控件了。
版权声明:转载请注明出处,谢谢!

  • 7
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值