C++,MFC重绘listcontrl,单行设置颜色,每行不同颜色展示

1.在消息映射中END_MESSAGE_MAP()之前添加如下代码

ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST1, OnCustomdrawList)

IDC_LIST1为list控件的ID根据实际情况更改。

2.在工程.h文件中添加以下代码

afx_msg void OnCustomdrawList(NMHDR*,LRESULT*);

函数名称可根据喜好自己定义,要与消息映射中函数名一致。

3.工程.cpp文件中添加以下函数

void CRealPlayDlg::OnCustomdrawList(NMHDR *pNMHDR, LRESULT *pResult)
{

    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);   
    *pResult = 0;   
    if(CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)   
    {   
        *pResult = CDRF_NOTIFYITEMDRAW;   
    }   
    else if(CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)   
    {      
                //列表每行一种颜色,共3种颜色
        if(pLVCD->nmcd.dwItemSpec % 3 == 1)   
            pLVCD->clrTextBk = RGB(255, 0, 0);    
        else if(pLVCD->nmcd.dwItemSpec % 3 == 2)     
            pLVCD->clrTextBk = RGB(101, 147, 74);  
        if (pLVCD->nmcd.dwItemSpec % 3 == 0)   
            pLVCD->clrTextBk = RGB(244, 208, 0);    
        *pResult = CDRF_DODEFAULT;   
    }   
}

4.运行即可

对向list表中读写数据,以后有时间再写。如有兴趣可留言一起探讨交流。

posted @ 2019-10-22 23:38  孔夫子君  阅读(1197)  评论(0编辑  收藏  举报