?
Ok hier mal ein erweiterter Denkanstoss in Codeform:
das hier kommt in den Eventhandler deines Parentfensters (falls der Listview ein Child ist und nicht gesubclassed wurde):
case WM_MEASUREITEM:
return OwnerDraw_MeasureItem(hWnd, wParam, lParam);
case WM_DRAWITEM:
return OwnerDraw_DrawItem(hWnd, wParam, lParam);
die Funktion sagt dem Listview die Zeilenhöhe und Breite. Hast du mehr als einen Listview kannst du auch auf "CtlID" prüfen
int OwnerDraw_MeasureItem(HWND hWnd, WPARAM wParam, LPARAM lParam){
if(((MEASUREITEMSTRUCT FAR *)lParam)->CtlType == ODT_LISTVIEW){
((MEASUREITEMSTRUCT FAR *)lParam)->itemHeight = 23; //Festlegung der Zeilenhöhe
((MEASUREITEMSTRUCT FAR *)lParam)->itemWidth = 45; //Festlegung der Zeilenbreite
return 1;
}
return 0;
}
ok hier machen wir den eigentlichen Kram für die Ausgabe, Anordnen des Textes und der Icons. Mit ImageList_Draw, DrawText, DrawIconEx, DrawState kannste jetzt die ausgabe von Text und Icon realisieren
int OwnerDraw_DrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam){
if(((DRAWITEMSTRUCT FAR *)lParam)->CtlType == ODT_LISTVIEW){
/*
so hier haste das DRAWITEMSTRUCT, damit sollte soweit alles klar sein
typedef struct tagDRAWITEMSTRUCT{
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
DWORD itemData;
} DRAWITEMSTRUCT;
*/
return 1;
}
return 0;
}