动态改变listctrl 单元格背景及文字颜色(非重写控件)
来源:互联网 发布:铜箔导电胶带 淘宝 编辑:程序博客网 时间:2024/05/22 16:00
CListCtrl 类里面没有直接改变单元格背景及文字颜色的成员函数,只有改变整个背景的颜色。我有时候只是需要把某个单元格的颜色改变来突出显示就可以了:
我们可以通过重载ListCtrl控件的Customdraw 消息,然后在里面写一些代码就可以了;
void CGPRSDlg::OnNMCustomdrawListshow(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = CDRF_DODEFAULT;
if ( CDDS_PREPAINT ==pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
// This is the notification message for an item. We'll request
// notifications before each subitem's prepaint stage.
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
{
COLORREF clrNewTextColor, clrNewBkColor;
int nItem=static_cast<int>(pLVCD->nmcd.dwItemSpec );
CString strTemp=m_listshow.GetItemText(nItem,pLVCD->iSubItem );
switch(pLVCD->iSubItem)
{
case 11:
case 12:
case 13:
case 14:
case 15:
{
if(strcmp(strTemp,"ON")==0)
{
clrNewTextColor = RGB(0,255,0);
clrNewBkColor = RGB(255,255,255);
}
if(strcmp(strTemp,"OFF")==0)
{
clrNewTextColor = RGB(122,122,122);
clrNewBkColor = RGB(255,255,255);
}
pLVCD->clrText =clrNewTextColor;
pLVCD->clrTextBk =clrNewBkColor;
*pResult = CDRF_DODEFAULT;
break;
}
default:
pLVCD->clrText = RGB(0,0,0);
pLVCD->clrTextBk = RGB(255,255,255);
*pResult = CDRF_DODEFAULT;
break;
}
}
上面的代码中pLVCD->nmcd.dwItemSpec : 意思是listctrl 第几行的索引值;
pLVCD->iSubItem :意思是某行的某列的索引值,通过这两个值我们就可以知道,现在要改的是哪个单元格了。
然后pLVCD->clrText 是这个单元格的文本颜色;
pLVCD->clrTextBk是这个单元格的背景颜色;
我们是如果这个是我们需要改的我们就给它一个新值,如果不是我们要改的我们就给他默认值。这样就
可以改变我们的单元格的颜色了。
下面我们可以给一个实际的例子,比如我们的ListCtrl是一个显示某台设备的参数的值,这些参数我们接收过来后,我们可以做一个判断,如果某项参数超过我们设定的报警值我们可以改变它的颜色来突出显示这个参数,这样岂不更直观;
。。。。。。
case 7:
{
if(strTemp>paravalue1 || strTemp<paravalue2)
{
clrNewTextColor = RGB(255,0,0);
clrNewBkColor = RGB(255,255,255);
}
else
{
clrNewTextColor = RGB(0,0,0);
clrNewBkColor = RGB(255,255,255);
}
pLVCD->clrText =clrNewTextColor;
pLVCD->clrTextBk =clrNewBkColor;
*pResult = CDRF_DODEFAULT;
break;
}
。。。。。。
当我们接受的一项参数在我们设置的报警值范围我们就把这个参数用红色字体显示出来。Ok这样就可以动态显示了;如果觉得这样还不方便,我们可以重写CListCtrl类,然后里面增加一个改变单元格颜色的成员函数,就可以更方便了;
如果大家有什么更好的建议,大家共同商量
- 动态改变listctrl 单元格背景及文字颜色(非重写控件)
- 动态改变Gridview单元格的背景颜色
- Excel的单元格根据文字内容改变格式,比如改变单元格的背景颜色
- Android-设置控件背景及文字颜色
- 孙鑫VC学习笔记:第十讲画图 改变对话框及控件的文字/背景颜色
- 孙鑫VC学习笔记:第十讲画图 改变对话框及控件的文字/背景颜色
- 如何改变界面和非按钮控件的背景颜色
- 改变List列表控件中的字体颜色和单元格背景颜色
- 在程序中动态改变控件的背景颜色
- 改变表格单元格的背景颜色
- Excel 单元格按照条件改变背景颜色
- word 改变表格,单元格的背景颜色
- clistctrl改变单元格的背景颜色
- 改变按钮控件的背景及文本颜色
- VC:改变控件的背景颜色及字体
- 改变对话框和控件的背景及文本颜色
- android标题栏、状态栏图标文字颜色及背景动态变化
- 改变控件背景颜色OnCtlColor
- 解决SwipeRefreshLayout结合ListView EmptyView使用不起作用的问题
- POJ2186 强联通
- flash 图文混排 灰常好的东东哦
- 深入解析AsyncTask
- linux下的doxygen的使用
- 动态改变listctrl 单元格背景及文字颜色(非重写控件)
- Maven+Jbpm4.4+Jboss5.0环境搭建
- 遇到没“人性”的管理:你真可怜!
- 如何使用svn的edit conflict解决file conflict
- 线程池
- ObjectArx学习笔记-导入导出图层列表
- iOS 6及以上控制个别视图旋转案例
- TCP与UDP应用
- Codeforces Round #250 (Div. 2)