首页 > 代码库 > CProgressCtrl 进度条显示百分比

CProgressCtrl 进度条显示百分比

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);}

 

CProgressCtrl 进度条显示百分比