CListCtrl单双行颜色不同

 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 } 

 

posted @ 2013-10-29 10:27  陳さん様  阅读(182)  评论(0)    收藏  举报