Treeview mit Icon - WIE? [gelöst]
-
Hallo zusammen!
Ich habe schonwieder eine kleine Frage!
Undzwar habe ich ein Treeview, welches wunderbar funktioniert! Allerdings wollte ich nun Icons hinzufügen und wurde nirgends fündig was genau ich ändern muss. Es werden keinerlei Fehler ausgegeben und es ist auch ausführbar - nur hat sich halt nichts verändert
Was ich bisher habe:HIMAGELIST hIlist; HBITMAP hBit; /*... Bild in Liste laden & TV setzten*/ hIlist = ImageList_Create(16,16,ILC_COLOR24,1,2); hBit = (HBITMAP)LoadImageA(NULL,"C:\\i.bmp",IMAGE_BITMAP,16,16,LR_LOADFROMFILE|LR_DEFAULTCOLOR); ImageList_Add(hIlist,hBit,NULL); TreeView_SetImageList(hTreeFile,hIlist,TVSIL_STATE); DeleteObject(hBit); /*... Neues TVitem hinzufügen:*/ tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvi.iImage = 0; tvi.iSelectedImage = 0;
Edit
Ok - ich habe grade den Fehle gefunden - war zu einfach
TreeView_SetImageList(hTreeFile,hIlist,TVSIL_NORMAL);statt
TreeView_SetImageList(hTreeFile,hIlist,TVSIL_STATE);Allerdings tut sich mir eine andere Frage auf: kann ich irgendwie Icons (durch ExtractIcon() anstelle von Bitmaps nutzen?
-
Du musst ja nur das HICON in ein HBITMAP konvertieren... dies geht mittels GetIconInfo...
http://msdn.microsoft.com/en-us/library/ms648070z.B. so:
HBITMAP IconAsBitmap(HICON hIcon) { if (hIcon) { ICONINFO iconInfo; ::GetIconInfo(hIcon, & iconInfo); ::DeleteObject(iconInfo.hbmMask); return iconInfo.hbmColor; } return NULL; }Nicht vergessen das HICON zu zerstören, wenn Du es nicht mehr brauchst... also am besten gleich!
-
Vielen dank!
Das klappt super!
Allerdings habe ich noch 2 Fragen:-
Wie bekomme ich es hin, dass auch hier die Transparenz übernommen wird? Muss man da irgendwie mit der Maske arbeiten?(Momantan wird der Hintergrund einfach schwarz gemalt)
Edit: Habe es jetzt zwar mithilfe einer Mask hinbekommen, jedoch ist das Ergebnis nur mittelmäßig - die Ränder werden sehr "ungenau" gemalt. -
Wie kann ich auswählen welches Icon (das sind die Icons von Windows für die Datentypen - und da sind ja immer mehrere größen enthalten) ich haben will?
Edit: Habe grade gesehen, dass man bei ExtractIconEx() einstellen kann welche größe man haben will
- also gelöst 
-
-
Jochen Kalmbach schrieb:
Du musst ja nur das HICON in ein HBITMAP konvertieren... dies geht mittels GetIconInfo...
Wozu das, warum nicht einfach ImageList_AddIcon? Wenn man dann noch das Flag ILC_MASK beim Erzeugen der ImageList angibt, klappt es auch mit der Transparenz besser als nur mittelmäßig.
-
Das hatte ich doch glatt übersehen... sorry...