Narf! Geschrieben 8. Oktober 2002 Geschrieben 8. Oktober 2002 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) Zitieren
Klotzkopp Geschrieben 8. Oktober 2002 Geschrieben 8. Oktober 2002 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? Zitieren
Narf! Geschrieben 9. Oktober 2002 Autor Geschrieben 9. Oktober 2002 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? Zitieren
Klotzkopp Geschrieben 9. Oktober 2002 Geschrieben 9. Oktober 2002 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 ); Zitieren
Narf! Geschrieben 24. Oktober 2002 Autor Geschrieben 24. Oktober 2002 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: Zitieren
-camper-cleo Geschrieben 24. Oktober 2002 Geschrieben 24. Oktober 2002 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?!?! Zitieren
Narf! Geschrieben 28. Oktober 2002 Autor Geschrieben 28. Oktober 2002 Noch zum Problem mit dem Löschen: Probleme macht er erst beim ersten markierten Item, vorher löscht er ohne zu murren. Zitieren
Klotzkopp Geschrieben 28. Oktober 2002 Geschrieben 28. Oktober 2002 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? Zitieren
Klotzkopp Geschrieben 28. Oktober 2002 Geschrieben 28. Oktober 2002 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. Zitieren
-camper-cleo Geschrieben 29. Oktober 2002 Geschrieben 29. Oktober 2002 habs schon aber danke. Zitieren
Narf! Geschrieben 29. Oktober 2002 Autor Geschrieben 29. Oktober 2002 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. Zitieren
Klotzkopp Geschrieben 29. Oktober 2002 Geschrieben 29. Oktober 2002 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) Zitieren
-camper-cleo Geschrieben 29. Oktober 2002 Geschrieben 29. Oktober 2002 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. Zitieren
Narf! Geschrieben 29. Oktober 2002 Autor Geschrieben 29. Oktober 2002 @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 Zitieren
-camper-cleo Geschrieben 29. Oktober 2002 Geschrieben 29. Oktober 2002 kann mich nur wiederholen bei mir nicht. Zitieren
Narf! Geschrieben 30. Oktober 2002 Autor Geschrieben 30. Oktober 2002 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: Zitieren
Klotzkopp Geschrieben 30. Oktober 2002 Geschrieben 30. Oktober 2002 Entwickelst Du unter Windows 95 oder 98? http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q233390& Zitieren
Narf! Geschrieben 12. Dezember 2002 Autor Geschrieben 12. Dezember 2002 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? Zitieren
Klotzkopp Geschrieben 12. Dezember 2002 Geschrieben 12. Dezember 2002 CTreeCtrl bietet keine Suchfunktion. Du musst also von Hand den gesamten Baum durchsuchen. Das kannst Du rekursiv oder iterativ machen. Zitieren
Narf! Geschrieben 13. Dezember 2002 Autor Geschrieben 13. Dezember 2002 Muss ich also zuerst den Tree aufbauen, dann von oben nach unten durch gehen? Zitieren
Klotzkopp Geschrieben 14. Dezember 2002 Geschrieben 14. Dezember 2002 Genau so. Du fängst mit GetRootItem an und hangelst Dich mit GetNextSiblingItem und GetChildItem durch den Baum. Zitieren
Narf! Geschrieben 19. Dezember 2002 Autor Geschrieben 19. Dezember 2002 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); } } Zitieren
Narf! Geschrieben 16. Januar 2003 Autor Geschrieben 16. Januar 2003 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? Zitieren
Narf! Geschrieben 20. Januar 2003 Autor Geschrieben 20. Januar 2003 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! Zitieren
Klotzkopp Geschrieben 20. Januar 2003 Geschrieben 20. Januar 2003 Vergleich bitte mal die Versionsnummern der Datei comdlg32.dll. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.