【MFC】进度条:Progress Control控件 |
您所在的位置:网站首页 › progress是什么软件 › 【MFC】进度条:Progress Control控件 |
01、目录
文章目录
01、目录02、Progress Control介绍03、Progress Control相关函数04、Progress Control示例4.1 功能:按照固定步长一次增加14.2 功能:按固定步长增加,并动态更新百分比4.3 功能:搭配定时器,动态更新显示进度条
05、小结
02、Progress Control介绍
进度条对于我们而言,想必都很熟悉了,安装软件、游戏加载都会有进度条的身影。 今天我们就来学习学习:Progress Control控件——进度条。 如下所示: 关于拖拽的方法,这里不做介绍,重点聊聊常用的几个方法。 03、Progress Control相关函数 create() ——创建Progress Control 针对不是通过资源文件上拖拉进度条控件生成的进度条,需要用此函数创建一个。SetRange() —— 设置进度条范围 设置进度条的起始值和终止值。(不管拖拽还是创建都要设置此,在初始化中)SetPos() —— 设置当前值 设置进度条的当前位置(值)。OffSetPos() —— 偏移一段位置 移动进度条一段距离(动态移动,如果不做延时,默认速度移动)SetStep() —— 设置步长 设置进度条偏移一次的长度,一般与StepIt搭配使用StepIt() —— 更新步长位置 按照步长来更新位置。GetPos() —— 得到当前值 获得进度条当前值。上述方法我会在下面例子中展示,就不举例了。 04、Progress Control示例 4.1 功能:按照固定步长一次增加1 CProgressCtrl *myProCtrl2 = (CProgressCtrl *)GetDlgItem(IDC_PROGRESS1); myProCtrl2->SetRange(0,100); for (int i = 0;iOffsetPos(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 SetWindowText(str); Sleep(100); } 4.3 功能:搭配定时器,动态更新显示进度条首先在初始化函数中设置范围和当前初始值 CProgressCtrl* pProg = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS); pProg->SetRange(0, 100); pProg->SetPos(0); //也可关联控件变量然后在开始按钮中设置定时器,如上图所示 //设置定时器 SetTimer(1, 100, NULL); //当开始的时候,按钮不可用 CButton* pBtn = (CButton*)GetDlgItem(IDC_BUTTON1); pBtn->EnableWindow(FALSE);然后在定时器函数设置进度条的实时位置 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就大致了解到这里了,多实践,相信大家很快就会掌握此控件了。 版权声明:转载请注明出处,谢谢! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |