ClistCtrl einstellen der Farbe eines Elements

Habe ich ClistView Kontrolle in meine MFC-Anwendung. Ich muss die Farbe einige der Elemente, die nach seinem Inhalt. Zum Beispiel, wenn es beginnt mit "Keine Antwort", muss ich es rot machen.

So weit, ich habe versucht

BEGIN_MESSAGE_MAP(CMessageView, CListView)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW,customDraw)
END_MESSAGE_MAP()

void CMessageView::Update()
{
CListCtrl& refCtrl = GetListCtrl();   
refCtrl.InsertItem(LVIF_TEXT|LVIF_PARAM,0,CTime::GetCurrentTime().Format("%H:%M:%S"),0,0,0,42);
refCtrl.SetItemText(0,1,"some text");
refCtrl.SetItemText(0,2,"No response to open");
}

void CMessageView::customDraw(NMHDR * pNMHDR, LRESULT * pResult)
{
_ASSERTE(*pResult == 0);

NMLVCUSTOMDRAW * pnmlvcd = (NMLVCUSTOMDRAW *)pNMHDR;

DWORD dwDrawStage = pnmlvcd->nmcd.dwDrawStage;

BOOL bSubItem = dwDrawStage & CDDS_SUBITEM;
dwDrawStage &= ~CDDS_SUBITEM;

switch (dwDrawStage)
{
case CDDS_PREPAINT:
    {
        *pResult = CDRF_NOTIFYITEMDRAW;
        break;
    }
case CDDS_ITEMPREPAINT:
case CDDS_SUBITEM:
    {
            if(pnmlvcd->nmcd.lItemlParam == 42)
            {
                pnmlvcd->clrText = RGB(255,0,0);            

            }               
            *pResult = 0;               
        break;
    }
default:
    {
        *pResult = 0;
        break;
    }
}
}

Aber es funktioniert nicht. Die Farbe ändert sich nicht. Bin ich etwas fehlt oder etwas falsch machen?

  • Ich habe dies mit großem Erfolg in der Vergangenheit, aber mein MFC-Tage liegen lange hinter mir. Versuchen Sie, dieses zu Lesen und geben Sie Ihre handler-ähnlichen code: codeproject.com/Articles/79/...
  • Dies ist einfacher zu tun, die nicht mit einem CMFCListCtrl
InformationsquelleAutor gorkem | 2013-03-15
Schreibe einen Kommentar