CListCtrlExt m_ListCtrl; m_ListCtrl.ModifyStyle(0,LVS_OWNERDRAWFIXED,0); void CListCtrlExt::DrawItem(LPDRAWITEMSTRUCT lpDIS) { int nItem=lpDIS->itemID; if(nItem == -1) return ; CRect rcCol = lpDIS->rcItem; CString sText; CDC* pDC=CDC::FromHandle(lpDIS->hDC); int nOldDCMode=pDC->SaveDC(); LVITEM item; item.iItem = nItem; item.iSubItem = 0; item.mask = LVIF_IMAGE|LVIF_STATE; item.stateMask = 0XFFFF; GetItem(&item); BOOL bSelected = item.state&LVIS_SELECTED; COLORREF color=::GetSysColor(COLOR_WINDOW); if(bSelected ) { pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); color=::GetSysColor(COLOR_HIGHLIGHT); } else { pDC->SetBkColor(color); pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT)); } LV_COLUMN lvc; lvc.mask=LVCF_FMT|LVCF_WIDTH; rcCol.right = rcCol.left; for(int nCol=0; GetColumn(nCol,&lvc); nCol++) { rcCol.left = rcCol.right; rcCol.right = rcCol.left + GetColumnWidth(nCol); HPEN hOldPen = (HPEN)::SelectObject(lpDIS->hDC, ::CreatePen(PS_SOLID, 1, RGB(0xc0,0xc0,0xc0))); HBRUSH hOldBrush = (HBRUSH)::SelectObject(lpDIS->hDC, ::CreateSolidBrush(color)); ::Rectangle(lpDIS->hDC, rcCol.left-1, rcCol.top-1, rcCol.right, rcCol.bottom); ::DeleteObject(SelectObject(lpDIS->hDC, hOldBrush)); ::DeleteObject(SelectObject(lpDIS->hDC, hOldPen)); sText=MakeShortString(pDC,GetItemText(nItem,nCol),rcCol.Width()); pDC->DrawText(sText, -1, CRect::CRect(rcCol.left+3,rcCol.top,rcCol.right,rcCol.bottom-2), DT_LEFT); } pDC->RestoreDC(nOldDCMode); }