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 }