用CMFCListCtrl 的话非常简单.重载GetCellColor就行. 对于CListCtrl,使用下面的方法. BOOL CReportCtrl::OnEraseBkgnd( CDC* PaintDC ) { if (_IsUseRowColor()) { CRect ctrl; CRect rect; CRect head; int itemHeight; CDC *pDC = GetDC(); // non-clipped DC CBrush brush0(m_colRow1); CBrush brush1(m_colRow2); GetClientRect(ctrl); GetHeaderCtrl().GetClientRect(head); PaintDC->FillRect(&ctrl, &brush0); int index = GetTopIndex(); int last_visible_index = index + GetCountPerPage() + 1; // since it's rare that an exact number fits, last visible may be a partial if (GetItemRect(index, &rect, LVIR_BOUNDS) != 0) { while (index <= last_visible_index) { GetItemRect(index, &rect, LVIR_BOUNDS); itemHeight = rect.Height(); PaintDC->FillRect(&rect, index % 2 ? &brush1 : &brush0); ctrl.left = rect.right; ctrl.top = max(rec