CTreeControl Problem

SCIPIO-AEMILIANUS

aka Dubdidadu
Ich hab nen kleines Problem mit CTreeControl und SetImageList.
Vorerst mein Code:
Hiermit lad ich die ICONs aus der Ressource in eine ImageList:
Code:
CImageList l;
    HICON hIcon;
    l.Create(16,16,TRUE,6,10);
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1));
    l.Add(hIcon);
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2));
    l.Add(hIcon);
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3));
    l.Add(hIcon);
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON4));
    l.Add(hIcon);
    m_tree.SetImageList(&l,LVSIL_NORMAL);

So jetzt hab ich halt ne TreeControl mit Namen m_tree, und setzte halt wie folgt immer die Items ein:
Code:
m_tree.InsertItem(data,1,1,root);

Die Items werden auch schön angezeigt, da wo Sie hin sollen. Vor den Items sind nun aber 16 mal 16 Pixel große weiße Felder. Ich wüsste jetzt gerne, wo der Fehler liegt, da ich einfach den Fehler nicht finde. Ich hab bereits auf über 20 verschiedenen Seiten sogar Anleitungen noch gefunden, aber die sagen mir auch nicht mehr als ich schon vorher wusste.
Zu den Seiten gehören:
http://www.functionx.com/visualc/applications/explorer.htm
http://www.codeproject.com/KB/cpp/VbNetExpTree.aspx
 
Inzwischen bin ich schon nen Stückchen weiter:
Mit
Code:
m_tree.SendMessageA(WM_PAINT,NULL,NULL);
Direkt nach dem hinzufügen des Items schaff ich zumindest die Root Elemente mit Icons zu versehen. Nun aber wenn ich die ausfahre, sind in den unteren die Icons wieder weg. Und selbst wenn ich in OnItemExpanded SendMessage aufrufe, werden keine Icons mehr weiter angezeigt.
 
Hi,

also wenn du das wirklich so gecoded:
Code:
    CImageList l;
    HICON hIcon;
    l.Create(16,16,TRUE,6,10);
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1));
    l.Add(hIcon);
.
.
.

dann bedeutet das, das du eine lokale Variable (l) innerhalb einer Funktion deklariert hast, die nach Verlassen der Funktion nicht mehr gültig ist !

Halte dir stattdessen die Image-List als Membervariablen deiner Klasse, in der sich auch dein TreeCtrl befindet und benamse die auch ordentlich ;-)

Dann kannst du dir auch den Aufruf von

m_tree.SendMessageA(WM_PAINT,NULL,NULL);

sparen..

Schönen Gruß,

Pit
 
Zurück