ctreectrl 通过onpaint 重绘实现根据需要使各节点颜色不同
2013-08-07 14:54
381 查看
我继承ctreectrl 通过重载onpaint 可以设置各个节点的颜色。可是只要我一刷新就各种颜色出错。各位可以给看看嘛!!!
这是 刚打开的时候的,一刷新就变这样了
我的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)); }
多谢大家帮帮忙了
相关文章推荐
- 通过nginx_lua实现根据请求参数分发道不同后端节点
- MVC扩展控制器工厂,通过实现IControllerFactory,根据action名称生成不同的Controller
- devexpress实现单元格根据条件显示不同的样式(颜色、字体、对齐方式,大小等)
- devexpress实现单元格根据条件显示不同的样式(颜色、字体、对齐方式,大小等)
- 高人请进:请教如何实现在CTreeCtrl中的项目可以通过拖曳(drag)来改变排序(暂时只考虑一层节点)
- TextView通过Html,实现一行文字,颜色不同等显示
- 以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例
- 通过OnPaint()给 CXXDialog填充不同的颜色。
- 实现咕咚地图路径颜色根据速度不同而颜色不同
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- Linux通过该控制台的字符流 实现打印出的字符不同颜色
- MFC三种不同方式实现图形的保存和重绘---方法一:通过兼容DC(CompatibleDC)的方式
- java通过反射,只需要传了类名和参数,就可以根据不同参数的构造方法实例化对象
- android中控制根据是否选中或者按下改变按钮的颜色(通过xml代码实现)
- MFC三种不同方式实现图形的保存和重绘---方法一:通过兼容DC(CompatibleDC)的方式
- table+webusercontrol实现左边treeview,右边根据节点选择不同加载不同页面
- nc7下某个用户某个节点有多个模板,可以通过代码实现通过选择不同的业务流程来调用不同的模板吗?
- Gridview某一列根据不同的条件显示不同颜色的实现(原创)
- 要实现读写分离需要根据用户的操作连接不同的数据库
- ctreectrl控件节点不同颜色(绝对靠谱)