码迷,mamicode.com
首页 > 其他好文 > 详细

CProgressCtrl 进度条显示百分比

时间:2014-12-18 01:31:17      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   color   os   sp   for   on   div   

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 进度条显示百分比

标签:style   blog   ar   color   os   sp   for   on   div   

原文地址:http://www.cnblogs.com/sylar-liang/p/4170798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!