您的位置:首页 > 大数据 > 人工智能

ctreectrl 通过onpaint 重绘实现根据需要使各节点颜色不同

2013-08-07 14:54 381 查看
我继承ctreectrl 通过重载onpaint 可以设置各个节点的颜色。可是只要我一刷新就各种颜色出错。各位可以给看看嘛!!!


这是 刚打开的时候的,一刷新就变这样了


我的onpaint函数是这个

void CMyTreeCtrl::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();

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

HTREEITEM hItem = GetFirstVisibleItem();

int iItemCount = GetVisibleCount() + 1;
while (hItem && iItemCount--)
{
CRect rect;

UINT selflag = TVIS_DROPHILITED|TVIS_SELECTED;
Color_Font cf;

if((GetItemState(hItem,selflag) & selflag)
&& ::GetFocus() == m_hWnd)
;
else if (m_mapColorFont.Lookup(hItem,cf))
{
CFont *pFontDC;
CFont fontDC;
LOGFONT logfont;

if (cf.logfont.lfFaceName[0] !='\0')
logfont = cf.logfont;
else{
CFont *pFont = GetFont();
pFont->GetLogFont(&logfont);
}

if(GetItemBold(hItem))
logfont.lfWeight = 700;
fontDC.CreateFontIndirect(&logfont);
pFontDC = memDC.SelectObject(&fontDC);

if(cf.color !=(COLORREF) - 1)
memDC.SetTextColor(cf.color);
else
memDC.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));

CString sItem = GetItemText(hItem);
GetItemRect(hItem, &rect, TRUE);
memDC.SetBkColor(GetSysColor(COLOR_WINDOW));
memDC.TextOut(rect.left + 2, rect.top + 1,sItem);

memDC.SelectObject(pFontDC);
}
hItem = GetNextVisibleItem(hItem);
}

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

memDC.DeleteDC();
}


判断语句是这个

int nClick = CWStringHelper::ToInt(strClick,NULL,0);
titem = leftTree->m_treeCtrl.InsertItem(description.c_str(), RItem);
leftTree->m_treeCtrl.SetItemData(titem, (DWORD)(j+10));
if (nClick>20)
{
leftTree->m_treeCtrl.SetItemColor(titem, RGB(255,0,0));
}
else if (nClick>10)
{
leftTree->m_treeCtrl.SetItemColor(titem, RGB(0,255,0));
}
else if (nClick>5)
{
leftTree->m_treeCtrl.SetItemColor(titem,RGB(0,0,255));
}


多谢大家帮帮忙了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐