CListCtrl单双行颜色不同

本文介绍如何通过派生CListCtrlEx类并重写OnCustomDraw函数来实现列表控件的自定义绘制功能,包括设置单双行背景色及选中行颜色。

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

 1 从CListCtrl派生一个类吧。网上有这类代码。就是添加NM_CUSTOMDRAW的响应函数,在里面可以实现单双行不同颜色,选中行不同颜色:
 2 
 3 void CListCtrlEx::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)  
 4 {
 5 // TODO: Add your control notification handler code here
 6 NMLVCUSTOMDRAW* lplvcd=(NMLVCUSTOMDRAW*)(pNMHDR);
 7 int nRow=(int)lplvcd->nmcd.dwItemSpec;
 8 switch (lplvcd->nmcd.dwDrawStage)
 9 {
10 case CDDS_PREPAINT:
11 *pResult |= CDRF_NOTIFYITEMDRAW;
12 break;   
13 case CDDS_ITEMPREPAINT:
14 //------------------------------------------------------
15 // 单行与双行的颜色  
16 if(nRow%2 == 1)//单行
17 {
18 lplvcd->clrTextBk = RGB(255,248,220);
19 lplvcd->clrText = RGB(0,0,0);
20 *pResult = CDRF_NEWFONT;  
21 }
22 else //双行
23 {
24 lplvcd->clrTextBk = RGB(176,196,222);
25 lplvcd->clrText = RGB(0,0,0);
26 *pResult = CDRF_NEWFONT;  
27 }
28 //-------------------------------------------------------
29 
30 //------------------------------------------------------
31 // 打勾项
32 //------------------------------------------------------
33 
34 //------------------------------------------------------
35 // 选中行
36 if(GetItemState(nRow,CDIS_SELECTED))
37 {
38 lplvcd->nmcd.uItemState &= ~CDIS_SELECTED;
39 lplvcd->clrTextBk = RGB(255,255,0);
40 lplvcd->clrText = RGB(255,0,0);
41 *pResult = CDRF_NEWFONT;
42 } 
43 //------------------------------------------------------
44 
45 break;
46 default:
47 *pResult = CDRF_DODEFAULT;  
48 break;
49 }
50 } 

 

转载于:https://www.cnblogs.com/cwbo-win/articles/3393817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值