QQ登录

只需一步,快速开始

94上位机VC MFC进度条文字显示进度百分比

[ 复制链接 ]

4.自定义类的使用,添加进度条控件,关联变量CProgressEx m_Progress;添加按钮,关联函数用于触发定时器SetT ...

4.自定义类的使用,添加进度条控件,关联变量CProgressEx m_Progress;添加按钮,关联函数用于触发定时器SetT ...

94上位机VC MFC进度条文字显示进度百分比


功能展示

MFC默认的进度条只有滚动的进度,没有具体的文字显示当前进百分比,我们当前例程就给进度条添加进度百分比,显示滚动比例的同时显示文字百分比,方便用户一目了然知晓当前操作进度。效果如图
要点提示
只需要在从CProgressCtrl派生自己的类,在OnPaint() 函数中实现便可。我们输出字符的起始位置是比较关键的一点:要输出字符串的总长度可以用进度条的CDC获得CSizesztext = pDC->GetTextExtent(sText); sztext 就包含了指定字符串的总长度和高度;获得进度条的窗口总长宽可用GetClientRect(clientRC),clientRC就包含了窗口的总长宽;那么文字输出的坐标X,Y,就可能通过int nX = (clientRC.Width() - sztext.cx) / 2; int nY = (clientRC.Height() -sztext.cy) / 2;获得;
实现功能
1.新建基于对话框的应用程序
2.从CProgressCtrl派生一个新类,class CProgressEx : public CProgressCtrl,添加三个变量用于设置不同的颜色值private: COLORREF m_crText;   //文本颜色 COLORREFm_crProgress; //进度颜色 COLORREF m_crBlank; //空白区域颜色;并在构造函数中初始化 m_crText   = RGB(255,0,  0); m_crBlank   = RGB(182, 182, 182); m_crProgress = RGB(0,255, 0);

3.添加OnPaint()函数实现当前进度文字显示功能;
  1. void CProgressEx::OnPaint()
  2. {
  3. //        CPaintDC dc(this); // device context for painting        
  4.         PAINTSTRUCT ps;
  5.         CDC* pDC = BeginPaint(&ps);                                                //开始绘制
  6.         int nPos = GetPos();                                                        //获取当前进度条的位置
  7.         CString csPos;
  8.         csPos.Format("%d%%", nPos);                                                //格式化字符串
  9.         CRect clientRC;
  10.         GetClientRect(clientRC);                                                //获取客户区域
  11.         CSize sztext = pDC->GetTextExtent(csPos);                //获取字符串的高度和宽度
  12.         int nX = (clientRC.Width() - sztext.cx) / 2;        //计算中心位置
  13.         int nY = (clientRC.Height() - sztext.cy) / 2;
  14.         pDC->SetBkMode(TRANSPARENT);                                        //将设备上下文的背景模式设置为透明
  15.         int nMin, nMax;
  16.         GetRange(nMin, nMax);                                                        //获取进度条的显示范围
  17.         //获取单位刻度
复制代码
  1. double dFraction = (double)clientRC.Width() / (nMax-nMin);
  2.         int nLeft = nPos * dFraction;                                        //计算左边距
  3.         CRect leftRC  = clientRC;
  4.         leftRC.right  = nLeft;
  5.         CRect rightRC = clientRC;
  6.         rightRC.left  = nLeft;
  7.         pDC->FillRect(leftRC, &CBrush(m_crProgress));        //使用蓝色标识当前的进度
  8.         pDC->FillRect(rightRC, &CBrush(m_crBlank));                //使用白色标识剩余的部分
  9.         pDC->SetTextColor(m_crText);                                        //设置文本颜色
  10.         pDC->TextOut(nX, nY, csPos);                                        //输出当前的进度
  11.         ReleaseDC(pDC);                                                                        //释放设备上下文
  12.         EndPaint(&ps);                        
  13. }
复制代码
4.自定义类的使用,添加进度条控件,关联变量CProgressEx m_Progress;添加按钮,关联函数用于触发定时器SetTimer(1, 100, NULL);再实现定时器处理功能
  if(1==nIDEvent)
  {
  int nMin, nMax;
  m_Progress.GetRange(nMin,nMax);
  if(m_Progress.GetPos()>=nMax)//进度完成时处理
  {
  CDialog::OnOK();
  }
  m_Progress.SetPos(m_Progress.GetPos()+1);  
  }

我们来演示下功能实现的整个过程
请点击此处下载

查看状态:已购买或有权限

您的用户组是:游客

文件名称:94.上位机VC MFC进度条文字显示进度百分比.rar 
文件大小:141.17 KB 
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索