1.资源添加CProgressCtrl,添加变量m_proCtrl。
2.添加类CMyProCtrl
1)添加3个成员变量
COLORREF m_colPro; // 进度条颜色 COLORREF m_colBlank; // 空白区域颜色 COLORREF m_colText; // 文字颜色
2)重写WM_PAINT函数
void CMyProCtrl::OnPaint() { //CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CProgressCtrl::OnPaint() PAINTSTRUCT ps; CDC *pdc = BeginPaint(&ps); // 获取进度 int curPos = GetPos(); // 字体 CString strText; strText.Format(_T("%d%%"),curPos); // 如 10% // 获取客户区大小 CRect rc; GetClientRect(&rc); // 获取文字大小 CSize csText = pdc->GetTextExtent(strText); // 设置文字的x,y int nX = (rc.Width() - csText.cx)/2; int nY = (rc.Height() - csText.cy)/2; // 设置背景模式 pdc->SetBkMode(TRANSPARENT); // 透明 int max,min; GetRange(min,max); // 获取范围大小 // 每一宽度所占比例: double every = (double)rc.Width()/(max-min); int now = every * curPos; // 设置进度条、空白区域 CRect rcLeft,rcRight; // left 进度条; right 空白区域 rcLeft = rcRight= rc; rcLeft.right = now; rcRight.left = now; // 填充颜色 pdc->FillRect(rcLeft,&(CBrush)m_colPro); // 进度条颜色 pdc->FillRect(rcRight,&(CBrush)m_colBlank); //空白区域 // 设置文本颜色 pdc->SetTextColor(m_colText); // 输出文本 pdc->TextOut(nX,nY,strText); ReleaseDC(pdc); EndPaint(&ps); }
3.把CProgressCtrl类型改为CMyProCtrl。
4.OnInitDialog中添加定时器
SetTimer(0,100,NULL);
5.重载WM_TIMER函数
void CCProgressCtrl1Dlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 int pos = m_proCtrl.GetPos(); m_proCtrl.SetPos(pos+1); CDialogEx::OnTimer(nIDEvent); }