#include "stdafx.h" #include "ListCtrlEx.h" CListCtrlEx::CListCtrlEx() { } CListCtrlEx::~CListCtrlEx() { } BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl) ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CListCtrlEx::OnNMCustomdraw) END_MESSAGE_MAP() void CListCtrlEx::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult) { LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR); // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë *pResult = CDRF_DODEFAULT; NMLVCUSTOMDRAW * lplvdr = (NMLVCUSTOMDRAW*)pNMHDR; NMCUSTOMDRAW &nmcd = lplvdr->nmcd; switch (lplvdr->nmcd.dwDrawStage)//ÅжÏ״̬ { case CDDS_PREPAINT: { *pResult = CDRF_NOTIFYITEMDRAW; break; } case CDDS_ITEMPREPAINT://Èç¹ûΪ»­ITEM֮ǰ¾ÍÒª½øÐÐÑÕÉ«µÄ¸Ä±ä { // ¸ù¾ÝÔÚ SetItemColor(DWORD iItem, COLORREF color) ÉèÖÃµÄ // ITEMºÅºÍCOLORREF ÔÚÃþ°åÖвéÕÒ£¬È»ºó½øÐÐÑÕÉ«¸³Öµ¡£ //LISTITEMEX_9& itemex = m_listItemColor.GetAt(m_listItemColor.FindIndex(nmcd.dwItemSpec)); //lplvdr->clrText = itemex.colText; //lplvdr->clrTextBk = itemex.colTextBk; //*pResult = CDRF_DODEFAULT; if (nmcd.dwItemSpec % 2 == 0) { lplvdr->clrText = RGB(0, 0, 0); lplvdr->clrTextBk = RGB(235, 235, 235); *pResult = CDRF_DODEFAULT; } else { lplvdr->clrText = RGB(0, 0, 0); lplvdr->clrTextBk = RGB(255, 255, 255); *pResult = CDRF_DODEFAULT; } break; } } } void CListCtrlEx::SetItemColor(DWORD_PTR iItem, COLORREF TextColor, COLORREF TextBkColor) { if (iItem >= m_listItemColor.GetSize()) return; LISTITEMEX_9& itemex = m_listItemColor.GetAt(m_listItemColor.FindIndex(iItem)); itemex.colText = TextColor; itemex.colTextBk = TextBkColor; this->RedrawItems(iItem, iItem); // ÖØÐÂȾɫ UpdateWindow(); } LRESULT CListCtrlEx::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { int nRet = CListCtrl::WindowProc(message, wParam, lParam); if (message == LVM_INSERTITEM) { if (nRet != -1) { LISTITEMEX_9 itemex = {RGB(0,0,0), RGB(255, 255, 255)}; LVITEM* p = (LVITEM*)lParam; m_listItemColor.InsertBefore(m_listItemColor.FindIndex(p->iItem), itemex); } } else if (message == LVM_DELETEITEM) { if (nRet != 0) { m_listItemColor.RemoveAt(m_listItemColor.FindIndex(wParam)); } } else if (message == LVM_DELETEALLITEMS) { if (nRet != 0) { m_listItemColor.RemoveAll(); } } return nRet; }