树控件自绘//为什么wm_paint消息里SetTextColor设置字体颜色不行//
void CTreeCtrlEx::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rcClient;
GetClientRect(rcClient); //获取客户区
CDC memDC;
CDC memDC_Father;
memDC.CreateCompatibleDC(&dc);
memDC_Father.CreateCompatibleDC(&dc);
//SetTextColor(RGB(255,255,255));
CBitmap bitmap;
CBitmap bitmap_father;
bitmap.CreateCompatibleBitmap(&dc,rcClient.Width(),rcClient.Height());
bitmap_father.CreateCompatibleBitmap(&dc,rcClient.Width(),rcClient.Height());
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
CBitmap* pOldBitmap_Father = memDC_Father.SelectObject(&bitmap_father);
GradientFillRect(memDC.m_hDC,rcClient,0xFDE7C5,0xffffff,false);
CTreeCtrl::DefWindowProc(WM_PAINT, (WPARAM)memDC_Father.GetSafeHdc(), 0);
COLORREF cr = GetBkColor();
if (cr == -1)
cr = GetSysColor(COLOR_WINDOW);
::TransparentBlt(memDC.GetSafeHdc(), 0, 0, rcClient.Width(), rcClient.Height(), memDC_Father.GetSafeHdc(), 0, 0, rcClient.Width(), rcClient.Height(), cr);
dc.BitBlt(rcClient.left,rcClient.top,rcClient.Width(),rcClient.Height(),&memDC,rcClient.left,rcClient.top,SRCCOPY);
memDC.SelectObject(pOldBitmap);
memDC.DeleteDC();
}
[解决办法]
消息:TVM_SETTEXTCOLOR
MFC:CTreeCtrl.SetTextColor
[解决办法]
SetTextColor(RGB(255,255,255)); 这里设置了字体是白色,但背景默认也是白色
那TransparentBlt作用是用来过滤关键色的,背景和字体都是白色都被过滤掉了
[解决办法]
建议初始化SetTextColor一次看看效果