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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diesen code in eine einfache Beispiel-Anwendung für mich gearbeitet. Meine Liste hat zwei Spalten und zwei Gegenstände. Der zweite Punkt, die zweite Spalte ist item data set 42, in diesem Fall nur der jeweilige Unterposition hatte den text in rot geändert.
Wenn du VS2008 SP1, es ist viel einfacher zu verwenden
CMFCListCtrl
statt - es hat virtuelle Funktionen, die Sie überschreiben können, um die Vorder-und Hintergrundfarben der einzelnen Zeilen.