2012-06-23 2 views
0

Прежде всего, я бы настроил, среди прочего, цвет текста и цвет выделения (текст фона). Например, цвет текста должен быть синим; цвет текста должен быть прозрачным. Итак, я переопределил метод OnPaint(); Я называю функции SetTextColor() и SetBkColor(), но, к сожалению, я всегда получаю недопустимые цвета или получаю раздражающий эффект «бесконечного цикла». Здесь вы можете увидеть его полную реализацию.Custom CTreeCtrl - Как изменить цвет текста/выбора

void CustomTree::OnPaint() 
{ 
    CPaintDC dc(this); 

    CDC memDC; 
    memDC.CreateCompatibleDC(&dc); 

    CRect rcClip, rcClient; 
    dc.GetClipBox(&rcClip); 
    GetClientRect(&rcClient); 

    CBitmap bitmap; 
    bitmap.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height()); 
    memDC.SelectObject(&bitmap); 

    CRgn rgn; 
    rgn.CreateRectRgnIndirect(&rcClip); 
    memDC.SelectClipRgn(&rgn); 
    rgn.DeleteObject(); 

    /* WHAT IS the correct usage of SetText/Bk Color? */ 

    // ::SetTextColor(memDC, RGB(0, 0, 255)); 
    // ::SetBkColor(memDC, RGB(0, 0, 255)); 
    // COLORREF col = SetTextColor(RGB(0,0,255)); 
    // COLORREF co2 = memDC.SetTextColor(RGB(0,0,255)); 

    // First let the control do its default drawing. 

    CWnd::DefWindowProc(WM_PAINT, (WPARAM)memDC.m_hDC, 0); 

    // do some others stuffs... 

    dc.BitBlt(rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(), &memDC, 
       rcClip.left, rcClip.top, SRCCOPY); 

    memDC.DeleteDC(); 
} 

Где ошибка?

Благодаря

IT

ответ

0

Если вы хотите изменить цвет и шрифт для TreeView, вы должны поймать и реагировать на NM_CUSTOMDRAW. Недостаточно просто установить свойства перед вызовом по умолчанию.