Veröffentlicht 8. Oktober 200222 j Hallo halli! Wie kann ich Elemente in eine Tree-Ansicht einfügen bzw. das Level festlegen? Und vielleicht kann mir jemand mit der CD-ROM-Kontrolle helfen?! (siehe Laufwerke und ihre Buchstaben)
8. Oktober 200222 j Original geschrieben von Narf! Wie kann ich Elemente in eine Tree-Ansicht einfügen bzw. das Level festlegen?MFC oder nicht? Falls ja, mit CTreeCtrl::InsertItem. Wenn Du mit Level meinst, wo das neue Element eingefügt werden soll: Du musst bei InsertItem das Parent-Element angeben, in Form eines HTREEITEM. Ein solches bekommst Du beim Aufruf von InsertItem für das neu eingefügte Element zurück. Wenn Du ein Element auf der obersten Ebene anlegen willst, musst Du als Parent TVI_ROOT angeben. Siehe auch: http://msdn.microsoft.com/library/en-us/vclib/html/_mfc_CTreeCtrl.3a3a.InsertItem.asp Und vielleicht kann mir jemand mit der CD-ROM-Kontrolle helfen?! (siehe Laufwerke und ihre Buchstaben) Hat Dir ffGebaecks Antwort nicht weitergeholfen?
9. Oktober 200222 j Autor Tachchen! Danke für die Tree-Tipps, es hat geklappt. Aber nun das nächste Problem: Wenn ich ein Item aus der Liste auswähle, dann möchte ich den Text des Items in einer Variable speichern, um sie mit einem anderen String zu vergleichen. Wie bekomme ich den Item-Text in eine Variable?
9. Oktober 200222 j Dafür hättest Du kein neues Thema beginnen müssen, ich führ das mal zusammen . Aber zur Frage: Um überhaupt etwas davon mitzubekommen, wenn sich die Selektion eines Tree Controls ändert, musst Du im Klassenassistenten für das Control eine Nachrichtenbehandlungsfunktion für die Nachricht TNV_SELCHANGING einrichten. Die generierte Funktion sieht dann in etwa so aus: void CDeinDlg::OnSelchangedTreeXy(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here *pResult = 0; }[/CODE] Diese Funktion wird aufgerufen, wenn sich die Auswahl ändert. An den Text des Elements kommst Du mit CTreeCtrl::GetItemText, dafür brauchst Du das HTREEITEM des Elements als Parameter. Das wird hier aber zum Glück mitgeliefert, in der NM_TREEVIEW-Struktur. Du musst also nur folgenden Code an der TODO-Stelle einfügen, und schon hast Du den Text in einem CString:[CODE]CString strItemText = m_DeinTreeCtrl.GetItemText( pNMTreeView->itemNew.hItem );
24. Oktober 200222 j Autor Noch 'n Problem: Wenn ich den Tree das erstemal aufbauen lasse, geht alles klar. Bei DeleteAllItems macht er keine Probleme. Wenn ich aber den Tree ein zweites Mal aufbauen lasse, lösche ich den Inhalt der drin steht mit m_Tree.DeleteAllItems(). Dabei bekomme ich jetzt eine seltsame Fehlermeldung: MessageBox ohne Text! Was soll das? Die kommt bei jedem Item, das gelöscht wird. Danach habe ich zwar die neue Tree-Ansicht, aber wenn ich darin herum navigiere, kommt wieder diese Fehlermeldung. PANIK! :confused:
24. Oktober 200222 j oh cool muss ich kein neues aufmachen. hab da auch mal ne frage. hab den namen vom item und brauch das handle hab aber keine funktion gefunden die das bewerkstelligen könnte. hab ich da was übersehen??? wenns nicht geht wie mach ich das am blödsten ohne dass ich mir jeden text geben lasse und dann die strings vergleiche?!?!
28. Oktober 200222 j Autor Noch zum Problem mit dem Löschen: Probleme macht er erst beim ersten markierten Item, vorher löscht er ohne zu murren.
28. Oktober 200222 j Originally posted by Narf! Probleme macht er erst beim ersten markierten Item, vorher löscht er ohne zu murren. Hast Du einen Handler für TVN_DELETEITEM? Wenn ja, was steht drin?
28. Oktober 200222 j Originally posted by [camper]cleo wenns nicht geht wie mach ich das am blödsten ohne dass ich mir jeden text geben lasse und dann die strings vergleiche?!?! Ohne das wird's nicht gehen. Ich würde eine rekursive Funktion empfehlen.
29. Oktober 200222 j Autor Mit pCtrl baue ich meine Tree-Ansicht auf und lösche vorher den Inhalt mit der dritten Zeile. Beim ersten Aufbau geht ja alles klar. CTreeCtrl* pCtrl = (CTreeCtrl*) GetDlgItem(IDC_TREE1); ASSERT(pCtrl != NULL); pCtrl->DeleteAllItems(); Den habe ich auch versucht, aber das war nichts. Egal wo ich den im Programm stehen hatte. //m_Tree.DeleteAllItems(); Es klappt alles bis eben auf das Löschen.
29. Oktober 200222 j Originally posted by Narf! Es klappt alles bis eben auf das Löschen. Nochmal: Hast Du eine Nachrichtenbehandlungsfunktion für TVN_DELETEITEM erstellt? Wenn ja, was steht drin? Der MessageMap-Eintrag sollte in etwa so aussehen: ON_NOTIFY(TVN_DELETEITEM, IDC_TREE1, OnDeleteitemTree)
29. Oktober 200222 j komisch bei mir klappts so hast du vielleicht ne messagebox irgendwann mal eingebaut??? hab gerade mal die OnDeleteItem.... überschrieben und reindebuggt. so wie ich das sehe wird diese funktion bei jedem item aufgerufen.
29. Oktober 200222 j Autor @Klotzkopp: Keinen Handler benutzt. @cleo:wird auch bei jedem Item aufgerufen, aber nur bei den nichtmarkierten und ab dem ersten markierten bei jedem nachfolgendem tritt der Fehler auf
30. Oktober 200222 j Autor Ich hab das jetzt mal mit dem Debugger probiert. Wenn ich es beim Haltepunkt bei pCtrl->SetFocus() weiterlaufen lasse, gibt er mir diese Fehlermeldung: Nicht abgefangene Ausnahme in test2.exe (GDI32.DLL): 0xC0000005: Access Violation. Nicht abgefangene Ausnahme in test2.exe (GDI32.DLL): 0xC0000005: Access Violation. :confused:
30. Oktober 200222 j Entwickelst Du unter Windows 95 oder 98? http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q233390&
12. Dezember 200222 j Autor Ich muss mal wieder was hierzu fragen: Ich lese aus einer Datei einen String aus, den möchte ich in der Treeansicht suchen und markieren, kann sich auch in einer nächsten Ebene befinden. Wie?
12. Dezember 200222 j CTreeCtrl bietet keine Suchfunktion. Du musst also von Hand den gesamten Baum durchsuchen. Das kannst Du rekursiv oder iterativ machen.
13. Dezember 200222 j Autor Muss ich also zuerst den Tree aufbauen, dann von oben nach unten durch gehen?
14. Dezember 200222 j Genau so. Du fängst mit GetRootItem an und hangelst Dich mit GetNextSiblingItem und GetChildItem durch den Baum.
19. Dezember 200222 j Autor Damit geht's: void xKlasse::Suchen() { HTREEITEM such=m_Tree.GetRootItem(); //m_Tree - Control BOOL find=0; CString suchtxt; while(find!=1) { suchtxt=m_Tree.GetItemText(such); if(strcmp(suchtxt,Titel)==0) //Titel - global, aus Datei gelesen { m_Tree.SelectItem(such); find=1; } else { if(m_Tree.ItemHasChildren(such)) { such=m_Tree.GetChildItem(such); suchtxt=m_Tree.GetItemText(such); if(strcmp(suchtxt,Titel)==0) { m_Tree.SelectItem(such); find=1; } } } such=m_Tree.GetNextVisibleItem(such); } }
16. Januar 200322 j Autor So, bin mal wieder am verzweifeln. :confused: Auf einigen Rechner funktioniert die Tree-Ansicht nicht richtig. Mein Programm startet, der Dialog wird angezeigt und auch die Tree-Ansicht ist gefüllt und alles an seinem Platz. Auf einigen Rechnern gibt es aber das Problem, dass man in der Tree-Ansicht nicht mit den Pfeiltasten navigieren kann, d.h. der blaue Balken ist nicht da. Wenn ich aber mit der Maus auf ein Item klicke, ist alles ok. Das Item wird markiert und OnSelChange() arbeitet. Drücke ich nun wieder auf eine Pfeiltaste, ist wieder alles beim Alten. Wo kann ich das Problem finden und beheben?
20. Januar 200322 j Autor Ich habe mir heute mit Depends die dll's anzeigen lassen und auf den Rechnern gesucht und gefunden, daran liegt es also nicht. Kann es vielleicht am Chipsatz auf dem Board liegen? Brauche dringend Hilfe!
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.