1 void CMyDlg::OnCustomdrawMyList ( NMHDR* pNMHDR, LRESULT* pResult ) 2 { 3 NMLVCUSTOMDRAW* pLVCD = reinterpret_cast( pNMHDR ); // Take the default processing unless we set this to something else below. 4 *pResult = CDRF_DODEFAULT; // First thing - check the draw stage. If it's the control's prepaint 5 // stage, then tell Windows we want messages for every item. 6 if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage ) 7 { 8 *pResult = CDRF_NOTIFYITEMDRAW; 9 } 10 elseif ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage ) 11 {12 // This is the notification message for an item. We'll request 13 // notifications before each subitem's prepaint stage. 14 *pResult = CDRF_NOTIFYSUBITEMDRAW; 15 } 16 elseif ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage ) 17 {18 // This is the prepaint stage for a subitem. Here's where we set the 19 // item's text and background colors. Our return value will tell 20 // Windows to draw the subitem itself, but it will use the new colors 21 // we set here. 22 // The text color will cycle through red, green, and light blue. 23 // The background color will be light blue for column 0, red for 24 // column 1, and black for column 2. 25 26 COLORREF crText, crBkgnd; 27 if ( 0 == pLVCD->iSubItem )28 { 29 crText = RGB(255,0,0); 30 crBkgnd = RGB(128,128,255); 31 } 32 elseif ( 1 == pLVCD->iSubItem ) 33 { 34 crText = RGB(0,255,0); 35 crBkgnd = RGB(255,0,0); 36 } 37 else 38 { 39 crText = RGB(128,128,255); 40 crBkgnd = RGB(0,0,0); 41 } 42 // Store the colors back in the NMLVCUSTOMDRAW struct. 43 44 pLVCD->clrText = crText; 45 pLVCD->clrTextBk = crBkgnd; 46 47 // Tell Windows to paint the control itself. 48 *pResult = CDRF_DODEFAULT; 49 }50 }