2012-06-23 91 views
0

首先,我會定製 - 除其他外 - 文本顏色和選擇顏色(文本背景)。 例如,文本顏色應該是藍色;文字背景的顏色應該是透明的。 所以,我重寫了OnPaint()方法;我調用SetTextColor()和SetBkColor()函數,但不幸的是,我總是得到無效的顏色,或者我得到一個惱人的「無限循環閃光」效果。 在這裏你可以看到他的完整實現。自定義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迴應。在調用默認設置之前簡單地設置屬性是不夠的。

相關問題