指定改变CListCtrl中某一行的颜色

转载 2013年12月06日 10:51:06

原文地址:http://cool.worm.blog.163.com/blog/static/64339006200911925824375/    

指定改变CListCtrl中某一行的颜色,比如说刚添加进去的一行,让它改变颜色,这样记录多了,容易看到自己刚刚加如的行,方便操作可查看,也可以让添加和修改的记录显示不一样的颜色,方便的多了,VC自带的没有这种功能。

1.首先从CListCtrl 继承一个类,命名为CXListCtrl

在头文件中加摸板

CMap<DWORD, DWORD&, COLORREF, COLORREF&> MapItemColor;

好在这里查找你的修改的颜色。

2.自己写个消息映射,可能添加不上,要自己写。

BEGIN_MESSAGE_MAP(CXListCtrl, CListCtrl)
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)
//  ON_WM_SIZE()
END_MESSAGE_MAP()

OnNMCustomdraw 为实现函数。

3.写OnNMCustomdraw函数。

void CXListCtrlNew::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: Add your control notification handler code here
    *pResult = CDRF_DODEFAULT;
    NMLVCUSTOMDRAW * lplvdr=(NMLVCUSTOMDRAW*)pNMHDR;
    NMCUSTOMDRAW &nmcd = lplvdr->nmcd;
    switch(lplvdr->nmcd.dwDrawStage)//判断状态
    {
        case CDDS_PREPAINT:
        {
            *pResult = CDRF_NOTIFYITEMDRAW;
            break;
        }
        case CDDS_ITEMPREPAINT://如果为画ITEM之前就要进行颜色的改变
        {
            COLORREF ItemColor;
            if(MapItemColor.Lookup(nmcd.dwItemSpec, ItemColor))
            // 根据在 SetItemColor(DWORD iItem, COLORREF color) 设置的
            // ITEM号和COLORREF 在摸板中查找,然后进行颜色赋值。
            {
                //lplvdr->clrText = RGB(0,0,0);//ItemColor;
                lplvdr->clrTextBk = ItemColor;
                *pResult = CDRF_DODEFAULT;
            }
        }
        break;
    }
}

4.修改指定一行的颜色。

void CXListCtrl::SetItemColor(DWORD iItem, COLORREF color)
{
    //    m_iCurrentItem = iItem;
    //    m_CurrentColor = color;

    MapItemColor.SetAt(iItem, color);//设置某行的颜色。
    this->RedrawItems(iItem, iItem);//重新染色

    //this->SetCheck(iItem,1);
    this->SetFocus();    //设置焦点
    UpdateWindow();
}

5.修改全部行的颜色。

void CXListCtrl::SetAllItemColor(DWORD iItem,COLORREF TextBkColor)
{
    //INT_PTR ncount = this->GetItemCount();
    if(iItem > 0)
    {
        for(DWORD numItem = 0; numItem < iItem ;numItem ++)
        {
            //iItem = i;
            MapItemColor.SetAt(numItem, TextBkColor);
            this->RedrawItems(numItem, numItem);
        }
    }

    return;
}

设置某一行背景颜色的CListCtrl

三个接口函数,设置某一行的文字颜色(前景色)和背景色,使用说明都放在注释里了,自己看吧: LineColorListCtrl.h #if !defined(AFX_LINECOLORLISTC...

设置某一行背景颜色的CListCtrl

三个接口函数,设置某一行的文字颜色(前景色)和背景色,使用说明都放在注释里了,自己看吧: LineColorListCtrl.h...

从 CListCtrl 派生一个了的继承类CColorListCtrl,主要用于改变单元格的颜色

有压力才有动力,经过两个多小时的摸索,饿着肚子干,终于实现了CListCtrl 单元色颜色的随意改变。特备忘如下: ColorListCtrl .h代码 #pragma once // ...

改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景

用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何派生一个类来改变...

改变CListCtrl某行的颜色

指定改变CListCtrl中某一行的颜色,比如说刚添加进去的一行,让它改变颜色,这样记录多了,容易看到自己刚刚加如的行,方便操作可查看,也可以让添加和修改的记录显示不一样的颜色,方便的多了,VC自带的...

改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景

用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何派生一个类来改变...

改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景

转载VC: 文章概要: 用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指定改变CListCtrl中某一行的颜色
举报原因:
原因补充:

(最多只允许输入30个字)