?
Ich habe eine Liste, die pro Eintrag drei Zeilen zeigen soll. Außerdem sollen die Zeilen abwechselnd grau oder weiß, je nach Systemfarben, gefärbt sein. Dabei ist 1. der Abstand der Zeilen zu groß und 2. wechseln die Farben ohne dass ich es mir erklären könnte - die zwei Vordergrundfarben sind effektiv sechs oder mehr verschiedene Farben.
case WM_MEASUREITEM:{
MEASUREITEMSTRUCT *mis = (MEASUREITEMSTRUCT*)lParam;
HDC hDC = GetDC(hWnd);
SIZE size;
GetTextExtentPoint32(hDC, "Date\nFrom\nSubject",17,&size);
mis->itemHeight = size.cy * 3;
ReleaseDC(hWnd, hDC);
return true;}
case WM_DRAWITEM:{
DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT*)lParam;
if( dis->hwndItem == GetDlgItem(hWnd, i_lstMails) )
{
COLORREF crForeColor, crBackColor;
if( dis->itemState & ODS_SELECTED )
{crForeColor = GetSysColor(COLOR_HIGHLIGHTTEXT);
crBackColor = GetSysColor(COLOR_HIGHLIGHT);}
else
{if(dis->itemID%2)
{crForeColor = GetSysColor(COLOR_WINDOWTEXT);
crBackColor = GetSysColor(COLOR_WINDOW);}
else
{crForeColor = GetSysColor(COLOR_BTNTEXT);
crBackColor = GetSysColor(COLOR_BTNFACE);}
}
HBRUSH hbr = CreateSolidBrush(crBackColor);
FillRect(dis->hDC,&dis->rcItem,hbr);
DeleteObject(hbr);
char buf[100];
SendMessage(GetDlgItem(hWnd, i_lstMails),LB_GETTEXT,dis->itemID,( long)buf);
SetTextColor(dis->hDC, crForeColor);
SetBkColor(dis->hDC,crBackColor);
DrawText(dis->hDC, buf, strlen(buf), &dis->rcItem, DT_WORD_ELLIPSIS);
}
Ich kann leider kein Bild hochladen und hoffe mal auf eine Erklärung. Die Farbe der Einträge hängt übrigens vom Inhalt der Zeile ab und kann grün, braun, rot, blau oder schwarz sein - letztere ist die gewollte Systemfarbe.