重构CListCtrl实现单个单元格背景颜色

第一步:设置单元格背景和字体颜色

int m_iRow[行数][列数] //列表颜色存储容器


void CColorListCtrl::OnNMCustomdraw(NMHDR *pNMHDR,LRESULT *pResult)   
{
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR); //关联pNMHDR
                                                                      
    *pResult = CDRF_DODEFAULT;

    // 检查绘画阶段。如果它是控件的预绘制阶段,那么Windows希望每个项目都有消息。
    if(CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
    {
        *pResult = CDRF_NOTIFYITEMDRAW;
    }
    else if(CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
    {
        // 这是一个项目的通知消息,将在每个子项的预画阶段之前请求通知。
        *pResult = CDRF_NOTIFYSUBITEMDRAW;
    }
    else if((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage) //dwDrawStage状态为CDDS_ITEMPREPAINT | CDDS_SUBITEM时
    {        
            /* 红背景 */
            if(m_iRow[pLVCD->nmcd.dwItemSpec][pLVCD->iSubItem] == 1)
            {
                pLVCD->clrTextBk = RGB(255, 0, 0);
                pLVCD->clrText = RGB(255, 255, 255);
            }
            /* 黄色高亮背景 */
            else if(m_iRow[pLVCD->nmcd.dwItemSpec][pLVCD->iSubItem] == 2)
            {
                pLVCD->clrTextBk = RGB(255, 215, 0);
                pLVCD->clrText = RGB(0, 40, 255);
            }
            else
            {
                pLVCD->clrTextBk = RGB(255, 255, 255);//如果不是选择的“行”和“列”就设置成系统默认的那种颜色。
                pLVCD->clrText = 0;
            }    
            *pResult = CDRF_DODEFAULT;
    }
}

第二步:批量控制零散单元格

/* 修改单个单元格字体和背景颜色 */
void CColorListCtrl::SetCellColor(int iRow, int iCol, int ColorValue)
{
    m_iRow[iRow][iCol] = ColorValue;    //m_iRow定义为全局
}

 

第三步:使用

m_Grid.SetCellColor(行,列, 颜色);

附上vs可执行代码:https://pan.baidu.com/s/1N18gaOnCj7iikGmR4ImCjA  提取码:o9um 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值