请问如何给CListCtrl的每一项设置不同的颜色?? 如题,我想给CListCtrl的每一项设置不同的背景色,但好像CListCtrl类本身没提供这样的接口(只有设置整个List背景色的方法)。请问这个需求要如何做?需要重写什么,如何重写,能否说具体一些?多谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自绘CListCtrl,重载虚函数DrawItem http://blog.csdn.net/VisualEleven/archive/2010/10/18/5948057.aspx 感谢,颜色的问题用你blog里的方法基本上解决了,但是又引出了一个新问题能否再指导一下,因为我的CListCtrl原来是设置了LVS_EX_CHECKBOXES风格的,而现在自绘以后,每一个item之前的checkbox就没了,只是在item之前留了一个空位,而且去点击这个空位似乎也没有checkbox的效果。能否再请教一下如何保留原来的checkbox功能?多谢了 http://hi.baidu.com/550189285/blog/item/e92e7e2901f4f8f499250a58.html参考这个.... 好的,矩形框我可以试着画一下,可是我更苦恼的是,现在好像点击这个区域,并没有体现出我原来针对于checkbox所做的功能(重写DrawItem只是重绘了吧,怎么会把checkbox的逻辑功能都覆盖了呢?不懂),即使我在这个区域贴了矩形框上去,那怎么保持原有的逻辑功能? 楼主,因为clistctrl类不能实现很多自定义的风格我建议你去codeproject上面,查看一个叫CGridCtrl的类,它几乎你实现每一个格子的自定义风格即省时又省力 楼主,简单的自绘,可以响应NM_CUSTOMDRAW就可以了,响应方法OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)里面,只需要判定行数,然后修改相关的颜色值就可以了。NMLVCUSTOMDRAW *pNMCD = reinterpret_cast<NMLVCUSTOMDRAW *>(pNMHDR); if (pNMCD->nmcd.dwDrawStage == CDDS_PREPAINT) { *pResult = CDRF_NOTIFYITEMDRAW; } else if (pNMCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) { if(奇数行) { pNMCD->clrTextBk = RGB(100,100,100); } else { pNMCD->clrTextBk = RGB(200,200,200); } *pResult = CDRF_DODEFAULT; } tcp粘包,半包处理,两种方法更好些,请教各位大侠 Vista 系统的权限怎么提高? 求一可重用的线程类的C++实现方案 请问大家开发ado数据库程序时,使用通用访问类吗? 如何让程序在系统启动之后自动启动运行? 出现异常,_RecordsetPtr处于什么状态?? 构造函数与析构函数 sobel边缘检测的问题,熟悉数字图象处理的请看!!! SOS!!!怎样开启 dos窗口 sohu.com的搜索引擎,怎么才能在每页结果中显示100个结果? 如何同时打开同一个数据库中的不同表 【50分】拜求如何将listcontrol控件中的某一列时间值显示在datetimepicker控件中
感谢,颜色的问题用你blog里的方法基本上解决了,但是又引出了一个新问题能否再指导一下,因为我的CListCtrl原来是设置了LVS_EX_CHECKBOXES风格的,而现在自绘以后,每一个item之前的checkbox就没了,只是在item之前留了一个空位,而且去点击这个空位似乎也没有checkbox的效果。能否再请教一下如何保留原来的checkbox功能?多谢了
参考这个....
好的,矩形框我可以试着画一下,可是我更苦恼的是,现在好像点击这个区域,并没有体现出我原来针对于checkbox所做的功能(重写DrawItem只是重绘了吧,怎么会把checkbox的逻辑功能都覆盖了呢?不懂),即使我在这个区域贴了矩形框上去,那怎么保持原有的逻辑功能?
我建议你去codeproject上面,查看一个叫CGridCtrl
的类,它几乎你实现每一个格子的自定义风格
即省时又省力
NMLVCUSTOMDRAW *pNMCD = reinterpret_cast<NMLVCUSTOMDRAW *>(pNMHDR);
if (pNMCD->nmcd.dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (pNMCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
if(奇数行)
{
pNMCD->clrTextBk = RGB(100,100,100);
}
else
{
pNMCD->clrTextBk = RGB(200,200,200);
}
*pResult = CDRF_DODEFAULT;
}