CTreeCtrl單獨節點顏色設置

在OnPaint()中調用PaintSelectItemTextColor()方法

void CNewTreeCtrl::_PaintSelectItemTextColor(CPaintDC &dc)
{
 CDC memDC;
 //從當前DC創建內存對象
 memDC.CreateCompatibleDC( &dc );
 
 //定義CRect對象,用來確定區域
 CRect rcClip, rcClient;
 //獲取當前對象的邊界區域
 dc.GetClipBox( &rcClip );
 //獲取當前對象的用戶區域
 GetClientRect(&rcClient);
 
 //創建一個bmp文件,作爲memDC的內容
 //該文件的大小與用於區域相同
 CBitmap bitmap;
 bitmap.CreateCompatibleBitmap( &dc, rcClient.Width(), rcClient.Height() );
 memDC.SelectObject( &bitmap );
 
 //通過對象的邊界區域創建CRgn對象
 CRgn rgn;
 rgn.CreateRectRgnIndirect( &rcClip );
 memDC.SelectClipRgn(&rgn);
 rgn.DeleteObject();
 
 //首先讓控件自己進行默認的繪製,繪製到內存中
 CWnd::DefWindowProc( WM_PAINT, (WPARAM)memDC.m_hDC, 0 );
 
 //獲取樹狀控件的第一個節點
 HTREEITEM hItem = GetSelectedItem();
 
 CFont *pFontDC;
 CFont fontDC;
 LOGFONT logfont;
 
 // 用戶沒有定義,使用系統字體
 CFont *pFont = GetFont();
 pFont->GetLogFont( &logfont );
  
 //創建字體
 fontDC.CreateFontIndirect( &logfont );
 pFontDC = memDC.SelectObject( &fontDC );
  
 memDC.SetTextColor( RGB(255, 0, 0) );
 
 //獲取節點文字
 CString sItem = GetItemText( hItem );
 
 //獲取節點區域
 CRect rect;
 GetItemRect( hItem, &rect, TRUE );
 //設置背景色爲系統色
 memDC.SetBkColor( GetSysColor( COLOR_WINDOW ) );
 //向內存中的圖片寫入內容,爲該節點的內容
 memDC.TextOut( rect.left+2, rect.top+1, sItem );
 
 memDC.SelectObject( pFontDC );
    
 dc.BitBlt( rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(), &memDC, rcClip.left, rcClip.top, SRCCOPY );
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章