我想实现这样一个功能,在listctrl里面改变字的颜色,但是不是一开始就改变的,符合某个条件在改变.例如屏幕有3行.每行都是红色的,我想加个按钮,当按钮后每行都变成蓝色的,请问如何实现啊?我是个棒槌,不太明白,我看见有的帖子说修改drawtiem,但是如何修改啊?是继承一个新的函数么?我不太明白,请您指点,还有我看到下个网站关于介绍:
http://www.codeproject.com/listctrl/lvcustomdraw.asp
第一个例子.
这个例子我弄上来了,颜色改变了,但是那是一开机自动变色的,如何实现按按钮在换一次啊.这个例子是在消息映射的时候加的函数,如何实现按钮按一下自动在执行一次消息映射的部分呢?或者我想的是错的,用别的方法也可以实现.请您指教.麻烦您写下相关代码,越简单越好.非常感谢!!!!!!!!!!!!!!!

解决方案 »

  1.   

    对于具有LVS_OWNERDRAWFIXED风格的ListCtrl或者ListView,必须重载drawitem函数,
    自己实现一个item的显示,包括绘制文本,绘制需要的各种image,并根据状态和风格设置选中背景等。
    如果需要改变文本的颜色,可以在listctrl或者listview的派生类中,增加一个私有变量来表示颜色,在drawitem中,根据该变量的取值,使用CDC对象的SetTextColor进行设置,而后调用drawtext时应该就会是你希望显示的颜色了。
      

  2.   

    当你想改变某一行的文本颜色或背景颜色时,只能重载函数drawItem().
    但是当你想改变列表中所有行的文本颜色和背景颜色,上述做法把容易问题搞复杂了:
    对于老兄的问题,三个函数不是同样可以解决吗?
    CListCtrl::SetTextColor
    CListCtrl::SetTextBkColor
    CListCtrl::SetBkColor
      

  3.   

    谢谢各位的回答,可是我有点不明白,如何重载drawitem函数?是继承一个类然后添加drawitem函数还是直接在什么地方添加drawitem函数??如何做?请说的稍微详细点,麻烦您真不好意思。这样可以实现我按一下按钮来改变某一航的颜色吗??有具体例子小弟将感激不尽,死又何妨!!!!!!!!(当然了死了还搞啥啊)总之请您在指点一下。谢谢!
      

  4.   

    继承CListCtrl或者CListView以后,添加drawitem函数。
    重载drawitem函数的例子很多。处理按钮消息,设定表示颜色的内部变量,而后要求重绘某一个item,就可以乐。