MFC 自绘进度条

http://my.oschina.net/u/131904/blog/55101


从 CProgress类派生出 CTextProgress

CTextProgress::CTextProgress()
{
    m_crProgress = RGB(0,255,0);
    m_crBlank = RGB(255,255,255);
    m_crText = RGB(0,25,255);
}

void CTextProgress::OnPaint() 
{
    //CPaintDC dc(this); // device context for painting
    // TODO: Add your message handler code here
    PAINTSTRUCT ps;
    CDC *pDC = BeginPaint(&ps);
    int nPos = GetPos();
    int nMin,nMax;
    GetRange(nMin,nMax);
    CString csPos;
    csPos.Format("%d%%",nPos*100/(nMax-nMin));
    
    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);
    
    
    //获取单位刻度
    double dFraction = (double) clientRC.Width()/(nMax-nMin);
    int nLeft = 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);
    // Do not call CProgressCtrl::OnPaint() for painting messages
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值