自己制作带文本显示的进度条控件。

第一步:创建自己的进度条控件类,该类继承自MFC进度条控件类CProgressCtrl,在其中添加3个成员变量,同时,修改该类的OnPaint()成员函数。

COLORREF m_crText;//文本颜色 COLORREF m_crProgress;//进度颜色 COLORREF m_crBlank;//空白区域颜色 void CTextProgess::OnPaint() { PAINTSTRUCT ps; CDC* pDC = BeginPaint(&ps); int nPos=GetPos();//获取进度条的当前位置 CString csPos; csPos.Format("%d%%",nPos);//把 进度条当前位置 格式化到字符串中 CRect clientRC; GetClientRect(clientRC);//获取进度条客户区域 CSize sztext = pDC->GetTextExtent(csPos);//获取字符串的高度和宽度 int nX=(clientRC.Width() - sztext.cx)/2;//计算中心位置 int nY=(clientRC.Height() - sztext.cy)/2; pDC->SetBkMode(TRANSPARENT);//将设备上下文的背景模式设为透明 int nMin,nMax; GetRange(nMin,nMax);//获取进度条的显示范围 //获取单位刻度 double dFraction=(double)clientRC.Width()/(nMax-nMin); int nLeft=int(nPos*dFraction);//计算左边距 CRect leftRC=clientRC; leftRC.right=nLeft; CRect rightRC=clientRC; rightRC.left=nLeft; pDC->FillRect(leftRC,&CBrush(m_crProgress));//填充进度条的左侧颜色 pDC->FillRect(rightRC,&CBrush(m_crBlank));//使用白色标识剩余部分 pDC->SetTextColor(m_crText);//设置文本颜色 pDC->TextOut(nX,nY,csPos);//输出当前的进度 ReleaseDC(pDC);//释放设备上下文 EndPaint(&ps);//结束窗口绘制 } 

第二步:在需要添加进度条控件的类中,添加进度条类的成员变量,成员变量的类型要选择自己制作的进度条类。然后就可以和操作MFC进度条类一样来操作自己的进度条类了。

         只需要简单的2步,就可以制作有自己特色的进度条类了。

 

你可能感兴趣的:(自己制作带文本显示的进度条控件。)