TreeControl durchsuchen
-
Hallo, ich habe das folgende Problem:
Ich möchte mein TreeControl nach einer Zeichenkette durchsuchen. Wenn ich nur die sichtbaren Bereiche durchsuche (sprich die expandierten Parent-Items), funktioniert es folgendermaßen:
for (HTREEITEM hItem=m_Tree.GetRootItem(); hItem!=NULL; hItem=m_Tree.GetNextItem(hItem, TVGN_NEXTVISIBLE))
Nun wollte ich aber auch die Elemente finden, wenn das Parent geschlossen ist (-).
Dafür hab ich TVGN_NEXTVISIBLE mit TVGN_NEXT ersetzt. Nun bricht meine Funktion aber bereits nach dem 1. ParentItem ab.Wie kann ich es erreichen, dass wirklich alle Items durchsucht werden, ob sie nun für den User sichtbar sind oder nicht?
Wichtig ist, dass ich nicht vorher den kompletten Baum expandieren muss, damit die Suche erfolgreich ist!
-
Traversieren von Bäumen mit Stack.
-
Hallo gäräld,
also deine Antwort hilft mir leider nicht wirklich weiter.
Mit traversieren bezeichnest du sicher das Durchhangeln durch den kompletten Baum des TreeControls.Wie meine erste Funktion zeigt, bin ich dazu ja in der Lage, aber halt nur für die Items die mir das TreeControl anzeigt.
Ich möchte aber sämtliche Elemente durchsuchen, auch wenn der entsprechende ParentAst des TreeControls nicht geöffnet ist.Ein entsprechendes Codebeispiel wäre sehr sinnvoll, danke!
-
nimm get childitem und iteriere dann durch alles durch. getnextitem war des, des ned so richtig funktioniert...
Esco
-
-
Hallo ihr beiden, also ich bin immer davon ausgegangen, dass die Funktionen korrekt arbeiten!
Aber ein Versuch mit GetChildItem hat tatsächlich funktioniert.
Das mit dem Traversieren schaue ich mir trotzdem noch mal an.Danke!
-
Das mit dem Traversieren schaue ich mir trotzdem noch mal an.
Wenn du einen Baum (egal ob binär oder "kinderreich") wirklich komplett ab einem Root Element nach unten durchgehen willst, kommst du an einer sauberen Traversierung nicht vorbei. Man legt jeweils die Spitze (root) des neuen Baums (Kind, Geschwister) auf den Stack und arbeitet anschließend Baum für Baum ab.
Siehe z.B.:
http://www.unibw-muenchen.de/ETTI/we6/soesemann/MuCPro/Skript.html
(suche dort nach "Traversieren")Alle Elemente eines Baumes werden nacheinander "traversiert", wenn der Knoteninhalt rekursiv vor (präorder), zwischen (inorder) oder nach (postorder) dem linken und rechten Teilbaum aufgesucht wird.
//Traversieren, Baum, rekursiv, inorder struct knoten { char inhalt; knoten *links, *rechts; } *wurzel; void traversieren(knoten *k, void (*p)(char c)) { if(k!=NULL) { traversieren(k->links,p); p(k->inhalt); traversieren(k->rechts,p); } }