首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

树控件从绘//为什么wm_paint消息里SetTextColor设置字体颜色不行//

2013-01-11 
树控件自绘//为什么wm_paint消息里SetTextColor设置字体颜色不行// void CTreeCtrlEx::OnPaint() {CPaintD

树控件自绘//为什么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一次看看效果

热点排行