我继承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));
}
多谢大家帮帮忙了