Veröffentlicht 8. Juli 200421 j Hallo Klotzkopp! Ich hoffe, Du kannst mir wiedermal hefen ... wie schon so oft!! Da ich das mit der MMC nicht hin bekomme, bau ich mir halt meine eigene Console. Hab mal 2 Fragen zurm CTreeCtrl. 1) Wie bekomme ich 16x16 Bildchen in die Liste? Geht das mit einer CImageList? Und auch mit Icons oder nur mit Bitmaps? 2.) Wie erzeuge ich die Baumstruktur in der TreeCrtl? Bei mir sind alle Einträge nur untereinander. Danke wie immer, LG, Filou
8. Juli 200421 j Ich hoffe, Du kannst mir wiedermal hefen Andere hier sind auch hilfreich, ist ja keine Ein-Mann-Show Geht das mit einer CImageList?Ganz genau. Wenn die Bilder schon zur Compilezeit bekannt sind, lädst du die Imagelist am einfachsten aus einer einzigen Bitmapressource, die alle Bilder nebeneinander enthält. Wie erzeuge ich die Baumstruktur in der TreeCrtl? Bei mir sind alle Einträge nur untereinander.Du musst bei InsertItem das HTREEITEM des Elternknotens angeben. Tust du das nicht, wird TVI_ROOT genommen, damit wird das neue Item unterhalb des (unsichtbaren) Wurzelknotens eingefügt.
9. Juli 200421 j Guten Morgen!! Du schläfst wohl nie Also, es können ja auch andere auf meine frage antworten. Aber bis jetzt hast Du mir immer zu 99% weiter geholfen! Und dafür ein dickes fettes DANKE an den besten C++ Freak hier im Forum!!! :uli Also das mit der ImageList funkioniert irgendwie nicht... Aber mal davon abgesehen, hab ich ein großes Problem mit den Registerkarten. Ich will nämlich ein Fenster "Eigenschaften von..." machen. Habe es soweit, dass ich Registerkarten anzeigen kann. Aber ich hab keinen schimmer, wie man die Inhalte der einzelnen Karteikarten ein- bzw. ausblendet. Oder sollte ich hierfür einen neuen Thread auf machen? Gruß, Filou
9. Juli 200421 j Und dafür ein dickes fettes DANKE an den besten C++ Freak hier im Forum!!!Den "besten" wage ich zu bezweifeln, den "Freak" nehme ich dir übel (), und die multiplen Satzzeichen finde ich furchtbar Also das mit der ImageList funkioniert irgendwie nicht..."Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung. Sag, was du gemacht hast - wenn möglich, mit Code - und beschreib genau, wie sich der Fehler äußert. Aber mal davon abgesehen, hab ich ein großes Problem mit den Registerkarten. ... Oder sollte ich hierfür einen neuen Thread auf machen? Ja bitte. Ein Thema - ein Thread, ein Thread - ein Thema.
9. Juli 200421 j Ok, also zurück zu ImageList. So hab ich sie die Baumstruktur angelegt: TV_INSERTSTRUCT tvinsert; tvinsert.hParent = NULL; tvinsert.hInsertAfter = TVI_LAST; tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT; tvinsert.item.hItem = NULL; tvinsert.item.state = 0; tvinsert.item.cchTextMax = 6; tvinsert.item.cChildren = 0; tvinsert.item.lParam = 0; //* SERVER tvinsert.item.pszText = "SERVER"; HTREEITEM hWurzel = m_CtrlTree.InsertItem(&tvinsert); Und die ImmageList so: CImageList m_imagelist; m_imagelist.Create(IDI_S_SERVER,16,16,ILC_COLOR16,1); m_imagelist.Add(IDI_S_SERVER); Bekomme die Fehlermeldung: error C2664: 'int __thiscall CImageList::Add(struct HICON__ *)' : Konvertierung des Parameters 1 von 'const int' in 'struct HICON__ *' nicht moeglich Wie muss ich das Icon der Liste hinzufügen? Und wie bekomme ich die Liste mit den Bildern dann in meiner baumstruktur?
9. Juli 200421 j UPDATE!! Hinzugefügt zur ImageList habe ich es jetzt so: m_imagelist.Add(HICON(IDI_S_SERVER)); Aber ich kann nicht testen, ob es fuktioniert, weil ich es ja nicht anzeigen lassen kann. zumindest bekomme ich keine Fehlermeldung mehr. Wie bekomme ich das Icon jetzt in mein TreeCtrl? InsertItem will ein Typ LPCTSTR als icon?? Vertseh ich net!!
9. Juli 200421 j Wenn du beim Anlegen der Items TVIF_IMAGE angibst, musst du auch tvinsert.item.iImage und tvinsert.item.iSelectedImage zuweisen. Das sind die Indizes auf die ImageList. Wie schon gesagt, ich empfehle, alle Item-Bilder nebeneinander in eine Bitmap-Ressource zu packen. Dann brauchst du gar kein Add mehr. Auch in deinem Beispiel ist Add unnötig, weil das Icon schon durch den Create-Aufruf in der ImageList landet. Wenn du wirklich mehrere Icons einzeln mit Add hinzufügen willst, dann schau dir LoadImage an.
9. Juli 200421 j m_imagelist.Add(HICON(IDI_S_SERVER)); Das ist ganz böse, das solltest du dir schnellstens abgewöhnen. Mit dem Cast stellst du den Compiler ruhig, damit sagst du quasi: "Halt den Mund, ich weiß es besser als Du". Der Compiler ist brav und denkt sich, Filou wird schon wissen, was er tut. Das ist aber nicht der Fall Also: Casts nur dann, wenn es einen guten Grund gibt. Nicht, um Compilerfehlermeldungen loszuwerden.
9. Juli 200421 j Ok, ich habe jetzt alles auf Bitmap umgestellt. Und es scheint auch zu funktionieren. Aber wie bekomme ich aus meiner ImageList ein TVIF_IMAGE? Oder geht das noch irgendwie anders?
9. Juli 200421 j Aber wie bekomme ich aus meiner ImageList ein TVIF_IMAGE? Die Frage verstehe ich nicht. TVIF_IMAGE ist ein Flag für die Maske. Dieses Flag hast du in deinem ersten Beitrag bereits benutzt. Du hast nur die Indexwerte für die Bilder nicht gesetzt: TV_INSERTSTRUCT tvinsert; tvinsert.hParent = NULL; tvinsert.hInsertAfter = TVI_LAST; tvinsert.item.mask = [b]TVIF_IMAGE[/b] | TVIF_SELECTEDIMAGE | TVIF_TEXT; tvinsert.item.hItem = NULL; tvinsert.item.state = 0; tvinsert.item.cchTextMax = 6; tvinsert.item.cChildren = 0; tvinsert.item.lParam = 0; [b]tvinsert.item.iImage = 1; tvinsert.item.iSelectedImage = 2;[/b] //* SERVER tvinsert.item.pszText = "SERVER"; HTREEITEM hWurzel = m_CtrlTree.InsertItem(&tvinsert); [/CODE] Damit wird für den Server, wenn er nicht ausgewählt ist (iImage), das zweite Bild aus der ImageList verwendet, und wenn er ausgewählt ist (iSelectedImage), das dritte Bild. Wenn du keine unterschiedlichen Bilder für ausgewählt/nicht ausgewählt brauchst, setzt du einfach beide auf denselben Wert. Hast du überhaupt dem Tree Control die ImageList zugewiesen, mit CTreeCtrl::SetImageList?
9. Juli 200421 j Schau mal hier. Vielleicht hilft dir ein Beispiel Programm einen bessern Überblick über die Funktionsweise zu bekommen.
9. Juli 200421 j Ich könnte verzeifeln.... Danke, ich habe es so gemacht, wie es da steht. ich habe jetzt auch den Platzhalter für ein image. Aber es ist weiß Nochmal zu den Registerkaten. Das hat sich erledigt. Hab ne super geile Anleitung gefunden, die sogar ich verstehe
9. Juli 200421 j Danke, ich habe es so gemacht, wie es da steht. ich habe jetzt auch den Platzhalter für ein image. Aber es ist weiß Hast du die Reihenfolge beachtet? 1. ImageList erstellen 2. ImageList dem TreeCtrl zuweisen 3. Items einfügen ICH HASSE DAS TREECTRL! Umständlicher hätte man das Ding nicht machen können Mal davon abgesehen, dass dieser Ausbruch niemandem weiterhilft, ich finde CTreeCtrl eigentlich ganz gut gelungen. Nur eine MoveItem-Funktion habe ich vermisst, aber die konnte ich recht einfach selbst schreiben.
9. Juli 200421 j Sorry, bin nur frustriert! Ja, ich habe die Reienfolge beachtet. Und es ist nur weiß.
9. Juli 200421 j // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen /////////////////////////////////////////////////////////// // DIE BAUMSTRUCKTUR DES TREECTRL'S /////////////////////////////////////////////////////////// // Imagelist anlegen CImageList m_imagelist; //BILD, AUFLÖSUNG, FARBEN m_imagelist.Create(IDB_S_SERVER, 16, 16, ILC_COLOR32); //ImageList dem TreeCtrl hinzufügen m_CtrlTree.SetImageList (&m_imagelist, TVSIL_NORMAL ); TV_INSERTSTRUCT tvinsert; tvinsert.hParent = NULL; tvinsert.hInsertAfter = TVI_LAST; tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT; tvinsert.item.hItem = NULL; tvinsert.item.state = 0; tvinsert.item.cchTextMax = 6; tvinsert.item.cChildren = 0; tvinsert.item.lParam = 0; tvinsert.item.iImage = 0; tvinsert.item.iSelectedImage = 0; // SERVER tvinsert.item.pszText = "SERVER"; HTREEITEM hWurzel = m_CtrlTree.InsertItem(&tvinsert);
9. Juli 200421 j Was ich eben herrausgefunden habe, die Größe des weißen Platzhalter ändert sich, entsprechent der Größe des ausgewählten Bildes. Habe eben ein 32x32 Bild eingesetzt und das weiß war größer.
9. Juli 200421 j Deine ImageList ist eine lokale Variable, das heißt, sie wird zerstört, wenn die Funktion beendet ist. Mach die ImageList zu einem Member der Klasse, zu der auch m_CtrlTree gehört.
12. Juli 200421 j Guten Morgen!! Danke, das hat jetzt funktioniert :-) Allerdingst hat das Bild nur 16 Farben. Selbst wenn ich ILC_COLORDDB oder ILC_COLOR32 angebe. Woran könnte denn das liegen?
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.