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

我继承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));
			}


多谢大家帮帮忙了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值