listview wie bei mozilla firefox
-
hi,
wie kann ich mit ownderdraw die downloadliste von mozilla firefox nachmachen?
hier mal der link für diejenigen die keinen firefox benutzen^^:
http://2.bp.blogspot.com/_60JWcqOL3AI/RiUBqQOd_GI/AAAAAAAAARE/0P_vd_Ovh3w/s1600/firefox%2Bdownload%2Bwindow.PNG
-
wärs nicht einfacher das ganze selbst zu schreiben als ganz neue Fensterklasse mit eigener Prozedur usw?
dann machste ein parent in das dann für jedes element ein child erstellt.
(die childs musste natührlich auch noch schreiben)
die childs haben dann z.B. immer das blau im Hintergrund als bitmap was sie dann laden und den Text und Icons schickste per SendMessage über ne eigene Message.
-
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; }