如题

解决方案 »

  1.   

    刚测试了一下,用SetTextColor没有问题,估计是你的别的地方有错
      

  2.   

    应该是不会有问题的,至少DrawText已经测试通过
      

  3.   

    代码如下,有什么错?// CScrollPtStatic 消息处理程序
    void CScrollPtStatic::OnPaint() 
    {
    CPaintDC dc(this);
    m_dc=&dc;
    // CPaintDC dc(this); // device context for painting
    m_dc->SetTextColor(m_crText);
    m_dc->SetBkMode(TRANSPARENT);
    m_dc->SelectObject(this->GetFont());// CDC MemDC;
    CDC m_ScMemmdc;
    m_ScMemmdc.CreateCompatibleDC(m_dc);
    m_ScMemmdc.SetMapMode(m_dc->GetMapMode());
    ///准备工作 CRect rect;
    CPen BorderPen,*pOldPen,UnderLinePen;
    CBrush BGBrush,*pOldBrush;
    BITMAP bm;
    int nTextLeft=0,nTextTop=0; //文字输出的位置 this->GetClientRect(&rect); ///画边框
    if(m_bBorder)
    {
    BorderPen.CreatePen(PS_SOLID,1,m_crBorder);
    BGBrush.CreateSolidBrush(m_crBG); pOldPen = m_dc->SelectObject(&BorderPen);
    pOldBrush = m_dc->SelectObject(&BGBrush); m_dc->Rectangle(&rect); m_dc->SelectObject(pOldPen);
    m_dc->SelectObject(pOldBrush); rect.DeflateRect(1,1);
    }
    ///贴背景图
    if(m_bClicked && m_ClickedBGBm.GetSafeHandle()!=NULL)
    {
    m_ScMemmdc.SelectObject(m_ClickedBGBm);
    m_dc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),
    &m_ScMemmdc,0,0,SRCCOPY);
    }
    else if(m_bOver && m_MouseOverBGBm.GetSafeHandle()!=NULL)//鼠标经过的时候
    {
    m_ScMemmdc.SelectObject(m_MouseOverBGBm);
    m_dc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),
    &m_ScMemmdc,0,0,SRCCOPY);
    }
    else if(m_BGBm.GetSafeHandle()!=NULL)
    {
    m_ScMemmdc.SelectObject(m_BGBm);
    m_dc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),
    &m_ScMemmdc,0,0,SRCCOPY);
    }
    ///贴标签图片
    if(m_bClicked && m_ClickedLabelBm.GetSafeHandle()!=NULL)
    {
    m_ClickedLabelBm.GetBitmap(&bm);
    double fScal=bm.bmWidth*1.0/bm.bmHeight;
    nTextLeft=int(rect.Height()*fScal)+4;
    m_ScMemmdc.SelectObject(m_ClickedLabelBm);
    m_dc->StretchBlt(rect.left,rect.top,int(rect.Height()*fScal),rect.Height(),
    &m_ScMemmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    }
    else if(m_bOver && m_MouseOverLabelBm.GetSafeHandle()!=NULL)
    {
    m_MouseOverLabelBm.GetBitmap(&bm);
    double fScal=bm.bmWidth*1.0/bm.bmHeight;
    nTextLeft=int(rect.Height()*fScal)+4;
    m_ScMemmdc.SelectObject(m_MouseOverLabelBm);
    m_dc->StretchBlt(rect.left,rect.top,int(rect.Height()*fScal),rect.Height(),
    &m_ScMemmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    }
    else if(m_LabelBm.GetSafeHandle()!=NULL)
    {
    m_LabelBm.GetBitmap(&bm);
    double fScal=bm.bmWidth*1.0/bm.bmHeight;
    nTextLeft=int(rect.Height()*fScal)+4;
    m_ScMemmdc.SelectObject(m_LabelBm);
    m_dc->StretchBlt(rect.left,rect.top,int(rect.Height()*fScal),rect.Height(),
    &m_ScMemmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    }
    else
    {
    nTextLeft=4;
    }    TEXTMETRIC tm;
    m_dc->GetTextMetrics(&tm);
    UINT nWidth = tm.tmAveCharWidth * m_strText.GetLength()+2*width;
    UINT nHeight = height; m_ScMemmdc.SelectObject(this->GetFont());
    m_ScMemmdc.SetTextColor(RGB(255, 0, 0)); CBitmap bitmap;
    bitmap.CreateCompatibleBitmap(&m_ScMemmdc,nWidth,nHeight);
    CBitmap* pOldBitmap = m_ScMemmdc.SelectObject(&bitmap);
    m_ScMemmdc.FillSolidRect(0,0,nWidth,nHeight,m_dc->GetBkColor());
        m_ScMemmdc.TextOut(0,0,m_strText);
        
        m_dc->BitBlt(0,0,width,nHeight,&m_ScMemmdc,mstartX,0,SRCCOPY);
    m_ScMemmdc.SelectObject(pOldBitmap);
    m_ScMemmdc.DeleteDC();
    bitmap.DeleteObject();