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

本文介绍了一种通过重载NM_CUSTOMDRAW消息来改变ListCtrl中特定列颜色的方法,以实现不同状态的视觉提示。该方法适用于需要对列表视图进行个性化颜色配置的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

 

  1. NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);  
  2.   
  3.     if ( CDDS_PREPAINT ==pLVCD->nmcd.dwDrawStage )  
  4.     {  
  5.         *pResult = CDRF_NOTIFYITEMDRAW;  
  6.     }  
  7.     else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )  
  8.     {  
  9.         // This is the notification message for an item. We'll request  
  10.         // notifications before each subitem's prepaint stage.  
  11.   
  12.         *pResult = CDRF_NOTIFYSUBITEMDRAW;  
  13.     }  
  14.     else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )  
  15.     {  
  16.         int nItem=static_cast<int>(pLVCD->nmcd.dwItemSpec );  
  17.         switch(pLVCD->iSubItem)  
  18.         {  
  19.         case 2:      
  20.         case 4:      
  21.             {   
  22.                 if (nItem % 2 == 0)  
  23.                 {  
  24.   
  25.                     COLORREF clrNewTextColor, clrNewBkColor;  
  26.                     clrNewTextColor = RGB(0,0,0);  
  27.                     clrNewBkColor = RGB(198,202,198);  
  28.   
  29.                     pLVCD->clrText =clrNewTextColor;  
  30.                     pLVCD->clrTextBk =clrNewBkColor;  
  31.                     *pResult = CDRF_DODEFAULT;  
  32.                     break;  
  33.                 }  
  34.             }      
  35.         default:  
  36.             pLVCD->clrText = RGB(0,0,0);  
  37.             pLVCD->clrTextBk = RGB(255,255,255);  
  38.             *pResult = CDRF_DODEFAULT;  
  39.             break;  
  40.         }   
  41.     }  


 

上面的代码仅仅是个例子,可以选择性地设置每个单元格的颜色,实际使用时,需要按照特殊需求进行差异化处理了!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值