我要让2个进度条显示不同文字,网上下了个源代码,是让一个进度条显示文字。我用指针,结果没任何显示。请高手帮帮忙。红色部分是我增加的代码。
void CTextProgressCtrl::OnPaint() 
{
    if (m_nMin >= m_nMax) 
        return;
    CRect *Rect1=(CRect*)GetDlgItem(IDC_PROGRESS1);
    CRect *Rect2=(CRect*)GetDlgItem(IDC_PROGRESS1);

    CRect LeftRect, RightRect,ClientRect;
    //源代码是GetClientRect(ClientRect);
    GetClientRect(Rect1);
    GetClientRect(Rect2);
    double Fraction = (double)(m_nPos - m_nMin) / ((double)(m_nMax - m_nMin));    CPaintDC PaintDC(this); // device context for painting
    CMemDC dc(&PaintDC);
    
    //源代码是LeftRect = RightRect =ClientRect;    LeftRect = RightRect =Rect1=Rect2;
    //获取进度的大小
    LeftRect.right = LeftRect.left + (int)((LeftRect.right - LeftRect.left)*Fraction);
    dc.FillSolidRect(LeftRect, m_colFore);    RightRect.left = LeftRect.right;
    dc.FillSolidRect(RightRect, m_colBk);
    UpdateData(FALSE);
    if (m_bShowText)
    {
        CString str,str2;        if (m_strText.GetLength())
            str = m_strText;
        else
            str.Format(_T("高度%d米"),_ttoi(ni1));
            str2.Format(_T("重量%d吨"),_ttoi(ni2));
 
        dc.SetBkMode(TRANSPARENT);        CRgn rgn1,rgn2;
 // 源代码是rgn.CreateRectRgn(ClientRect.left, ClientRect.top,ClientRect.right, ClientRect.bottom);
       rgn1.CreateRectRgn(Rect1->left,Rect1->top, Rect1->right, Rect1->bottom);
        dc.SelectClipRgn(&rgn1);
//设置颜色
        dc.SetTextColor(m_colTextBk);
//显示文字
        dc.DrawText(str,Rect1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        rgn1.DeleteObject();
// 另一个进度条显示文字        rgn2.CreateRectRgn(Rect2->left,Rect2->top, Rect2->right, Rect2->bottom);
        dc.SelectClipRgn(&rgn2);
//设置颜色
        dc.SetTextColor(m_colTextBk);
//显示文字
        dc.DrawText(str,Rect2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        rgn2.DeleteObject();

    }
}

解决方案 »

  1.   

    这个 有误,改成2,也没显示。
    CRect *Rect2=(CRect*)GetDlgItem(IDC_PROGRESS2);
      

  2.   

    CRect *Rect1=(CRect*)GetDlgItem(IDC_PROGRESS1);
    ==这算什么写法?GetDlgItem返回的是CWnd*类型啊,你居然转换成CRect*??????
      

  3.   

    CWnd *pWnd1=(CWnd*)GetDlgItem(IDC_PROGRESS1);
    CWnd *pWnd2=(CWnd*)GetDlgItem(IDC_PROGRESS1);
      CRect LeftRect, RightRect,ClientRect;
      //源代码是GetClientRect(ClientRect);
    CRect rc1,rc2;
    GetClientRect(&rc1);
    GetClientRect(&rc2);
    CRect *Rect1 = &rc1;
    CRect *Rect2 = &rc2;
      

  4.   

    *pWnd2 *pWnd1这两个指针怎么和显示关联起来呢?
      

  5.   

    我这样改的,还是没任何显示。
    void CTextProgressCtrl::OnPaint() 
    {
        if (m_nMin >= m_nMax) 
            return;
        CWnd *pWnd1=(CWnd*)GetDlgItem(IDC_PROGRESS1);
        CWnd *pWnd2=(CWnd*)GetDlgItem(IDC_PROGRESS2);
    CRect LeftRect, RightRect,ClientRect;
    CRect rc1,rc2;    pWnd1->GetClientRect(&rc1);
        pWnd2->GetClientRect(&rc2);
        CRect *Rect1 = &rc1;
        CRect *Rect2 = &rc2;    double Fraction = (double)(m_nPos - m_nMin) / ((double)(m_nMax - m_nMin));    CPaintDC PaintDC(this); // device context for painting
        CMemDC dc(&PaintDC);    LeftRect = RightRect =ClientRect;
        //获取进度的大小
        LeftRect.right = LeftRect.left + (int)((LeftRect.right - LeftRect.left)*Fraction);
        dc.FillSolidRect(LeftRect, m_colFore);    RightRect.left = LeftRect.right;
        dc.FillSolidRect(RightRect, m_colBk);
        UpdateData(FALSE);
        if (m_bShowText)
        {
            CString str,str2;
            if (m_strText.GetLength())
                str = m_strText;
            else
                str.Format(_T("高度%d米"),_ttoi(ni1));
                str2.Format(_T("重量%d吨"),_ttoi(ni2));
     
            dc.SetBkMode(TRANSPARENT);        CRgn rgn1,rgn2;
    //      rgn1.CreateRectRgn(ClientRect.left, ClientRect.top,ClientRect.right, ClientRect.bottom);
           rgn1.CreateRectRgn(Rect1->left,Rect1->top, Rect1->right, Rect1->bottom);
            dc.SelectClipRgn(&rgn1);
    //设置颜色
            dc.SetTextColor(m_colTextBk);
    //显示文字
            dc.DrawText(str,Rect1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
            rgn1.DeleteObject();       rgn2.CreateRectRgn(Rect2->left,Rect2->top, Rect2->right, Rect2->bottom);
            dc.SelectClipRgn(&rgn2);
    //设置颜色
            dc.SetTextColor(m_colTextBk);
    //显示文字
            dc.DrawText(str2,Rect2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
            rgn2.DeleteObject();
        }
    }