您的位置:首页 > 其它

ListCtrl设置单个单元格颜色的实现

2016-04-14 20:35 435 查看
近日的开发中,需要对List中某个单元格的颜色进行处理,以用来显示不同的效果,提示不同的状态,在网上找了不少资料,发现这一种是最简单的,最适合目前的需求。该文章的原址:http://hi.baidu.com/crazykay/blog/item/aa3e2b45f076773586947322.html,再次感谢作者。

下面我稍微做了点修改,这里仅仅记录一下。

实现这个的最简单的方法就是重载ListCtrl的NM_CUSTOMDRAW消息,如下:

ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST1, &Clistctrl_testDlg::OnNMCustomdrawList1)

然后在相关函数中添加处理代码:

 

[cpp]
view plain
copy

NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);  
  
    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 )  
    {  
        int nItem=static_cast<int>(pLVCD->nmcd.dwItemSpec );  
        switch(pLVCD->iSubItem)  
        {  
        case 2:      
        case 4:      
            {   
                if (nItem % 2 == 0)  
                {  
  
                    COLORREF clrNewTextColor, clrNewBkColor;  
                    clrNewTextColor = RGB(0,0,0);  
                    clrNewBkColor = RGB(198,202,198);  
  
                    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;  
        }   
    }  

 

上面的代码仅仅是个例子,可以选择性地设置每个单元格的颜色,实际使用时,需要按照特殊需求进行差异化处理了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc CListCtrl