MFC CTreectrl, Icon, Platz bleibt leer

stud85

Grünschnabel
Hallo zusammen.

ich hab folgendes problem:
in einer dialogbasierten mfc anwendung moechte ich eine tree control einfuegen.
hab dann ein objekt m_Tree vom typ CTreectrl erzeugt(ist natuerlich mit dem tree auf der gui verknuepft). nun moechte ich vor die einzelnen ebenen im baum icons stellen. dazu habe ich bei den resourcen ein icon (keine bitmap *.ico) hinzugefuegt das ich IDI_ICO2 nenne. leider bleibt in meinem tree der platz an dem das icon erscheinen soll (vor text) frei :( . unten habe ich exemplarisch einen auszug aus dem quellcode angegeben.

CImageList m_imageList;
m_Tree.DeleteAllItems();

m_imageList.Create (16, 16,ILC_MASK,0,1);
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICO2));
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_MAINFRAME));
m_Tree.SetImageList (&m_imageList, TVSIL_NORMAL);

HTREEITEM hService;

hService = m_Tree.InsertItem(_T("text"),0,0,TVI_ROOT);

ich verstehe leider nicht warum und war nach langem suchen leider nicht in der lage den fehler zu finden, weshalb ich mich hier an euch wende. ich waere fuer jede hilfe dankbar. vielen dank schon voraus!
 

Endurion

Erfahrenes Mitglied
Funktioniert hier auf Anhieb. Prüf mal, ob das LoadIcon überhaupt ungleich NULL zurückgibt?
 

stud85

Grünschnabel
DANKE FUER DIE SCHNELLE ANTWORT

also ich hab das mal so ueberprueft

HICON p;
p = NULL;
p = AfxGetApp()->LoadIcon(IDI_ICO2);
m_CmdButton.SetIcon(p);

nach LoadIcon() ist p beim debugen ungleich NULL

zudem nutze ich das selbe icon auch um es auf einem putton anzeigen zu lassen. was problemlos funktioniert. der platz im tree bleibt leider leer.
 
M

Maik

Hi stud85,

als neues Mitglied unserer Community heiße ich dich auf tutorials.de herzlich Willkommen und möchte dich darauf aufmerksam machen, dass in unserem Forum ein gewisses Maß deutscher Rechtschreibung erwünscht ist, unter die z.B. die Groß- und Kleinschreibung fällt - nachzulesen unter Punkt 15 unserer Netiquette ;)

Vielen Dank für dein Verständnis! :)

mfg Maik
 
L

Laerdris

Hallo,

Durch die Deklaration "CImageList m_imageList;" ist dein CImageList-Objekt eine lokale Variable, die am Funktionsende ungültig wird (Destruktor).

Lösung:
1.) CImageList-Objekt zum Member der Klasse machen (was zum Präfix "m_" passen würde).
2.) CImageList-Objekt mit "new" und "delete" erstellen/zerstören.

Gruß

Laerdris
 

Neue Beiträge