当前位置: 代码迷 >> VC/MFC >> 怎么改变ClistCtrl单元格中字符串部分字体的颜色
  详细解决方案

怎么改变ClistCtrl单元格中字符串部分字体的颜色

热度:162   发布时间:2016-05-02 03:45:07.0
如何改变ClistCtrl单元格中字符串部分字体的颜色?


如图所示【图是P的】,我只想把字符串【2009年1月15日23点40分】中的【2009】这一小段改为红色,改如何做呢?

改变ClistCtrl单元格中字符串的颜色的方法在网上有很多,可是改变字符串中部分字符的颜色我没有查到方法!求大神们指点!

------解决思路----------------------
在OnNMCustomdraw里可以指定颜色。或者设置LVS_OWNERDRAWFIXED样式,完全自己绘制,那就更灵活了。

如果你要改变某个单元格的颜色,在OnNMCustomdraw指定颜色就行。
如果是同一个单元格、同一个字符串需要多种颜色,那就只能LVS_OWNERDRAWFIXED自己绘制了。

OnNMCustomdraw部分可参考:
设置列表控件(ListCtrl)各种颜色
http://blog.csdn.net/cometnet/article/details/8477877
------解决思路----------------------
你这需求太奇葩了,只能自己去::SetTextColor,::DrawText
------解决思路----------------------
引用:
能稍微具体点儿么?如何自绘LVS_OWNERDRAWFIXED 啊?


MSDN里有说明啊。
LVS_OWNERDRAWFIXED 
The owner window can paint items in report view. The list-view control sends a WM_DRAWITEM message to paint each item; it does not send separate messages for each subitem. The iItemData member of the DRAWITEMSTRUCT structure contains the item data for the specified list-view item. 

就是说,你加了这个样式的话,重载CListCtrl的DrawItem函数,这个函数里一个一个单元格绘制
DRAWITEMSTRUCT参数里有HDC、项目索引(行号),再通过GetItem获取每列的文本。
GetItemRect、GetSubItemRect获取每行/每列的矩形区域。
SetTextColor设置文本颜色,DrawText画出文本。

注意:CListCtrl的DrawItem函数,不是OnDrawItem。
因为WM_DRAWITEM是发送给父窗口的。WM_DRAWITEM才对应OnDrawItem
------解决思路----------------------
重写CListCtrl,自己添加处理DrawItem虚函数。