Dialog mit Bitmap-Buttons->Bitmaps verschwinden
-
Hallo
Ich habe eine dialogfeldbasierende Anwendung; alle Buttons habe ich dort mit Bitmaps belegt:
bmp.LoadBitmap(IDB_BITMAP15); m_button1.SetBitmap(bmp); bmp.Detach();bmp ist eine CBitmap-Klasse.
Im Dialog habe ich eine CListCtrl, der ich Elemente mit Bitmaps hinzufüge.
lvitem.mask = LVIF_TEXT | LVIF_IMAGE; lvitem.iSubItem=0; lvitem.pszText=name.GetBuffer(0); lvitem.iImage=sfi.iIcon; lvitem.iItem=0; m_list.InsertItem(&lvitem);sfi ist eine SHFILEINFO-Klasse.
Soweit funktioniert das alles auch.
Problem ist, wenn ich öfter und/oder in größerem Umfang (mehrere tausend) Elemente dieser Liste hinzufüge, verschwinden irgendwann die Bitmaps von meinen Buttons.Nehme mal an, das ist irgendein Speicherproblem, oder?
Ist die Datenmenge für die Liste zu groß, oder muss ich für jedes Element das ich der Liste hinzufüge Speicherplatz anfordern? (Keine Ahnung wie ich das machen soll).
Den Inhalt der Liste lösche ich mit m_list.DeleteAllItems();Bin für jeden Hinweis dankbar.
-
Hallo
Weiß keiner Rat?

Ich habe zwischenzeitlich mal folgendes versucht:
Alles unnötige deaktiviert; nur mit ner Schleife 3000 Items dem CListCtrl hinzugefügt; alle items dann mit .DeleteAllItems gelöscht, und wieder 3000 in die Liste geschrieben.
Das reicht dann schon, um das Programm zu "zerstören". Bitmaps weg, wenn ich den Dialog verlasse (der wird von nem anderen Dialog aufgerufen) ist auch der Parent-Dialog "zerstört". Muss dann das Programm beenden und neu starten; dann geht´s wieder.
Habe auch versucht, mit malloc für jeden Eintrag in der Liste Speicherplatz zu reservieren; bringt aber garnix.
Ist das CListCtrl evtl. Sch.... ?
-
Rufst du auch die SHFILEINFO-Klasse 3000 Mal auf. Dann hast du bestimmt die MSDN nicht durchgelesen und dir gehen die Handle aus. Denn laut MSDN mußt du das Handle von hIcon aus der Struktur SHFILEINFO wieder frei geben.
Gruß Matthias
-
Hallo
Sehr guter Tip. Das war die Lösung. DANKE.
So richtig verstehen tu ich´s zwar nicht, da ich das hIcon nicht benutze, sondern nur das iIcon (der Index des Systemicon).
Möglicherweise hängt´s damit zusammen, das ich das hIcon ja mit initialisiere.
-
Wenn du die strucktur zurückbekommst ist diese initialisiert und da wird auch für das icon ein Handle erzeugt, dieses mußt du natürlich frei geben sonst gehen die irgendwann aus, ob du das Handle nutzt oder nicht is dabei vollkommen egal.
Aber schön das ich dir helfen konnte.
Gruß Matthias