CTreeCtrl - Auto Expand bei Doppelklick abschalten?



  • Hallo Forum,

    erstmal "Hallo", ich bin neu hier 🙂

    Ich habe ein Problem mit einem CTreeCtrl. Ich möchte gerne bestimmte Aktionen auslösen, wenn ich auf einem Eintrag doppelklicke.
    Wird dieser Doppelklick auf einem Item ausgeführt, welches noch Children hat, so wird es automatisch expanded (oder collapsed, falls es schon expanded ist).
    Ich möchte aber, dass sich nur das Bild von einem Eintrag ändert, wenn doppelt geklickt wird und dass ein Expand nur möglich ist, wenn man auf das + Zeichen klickt.

    Wie kann man dieses "Auto-Expand" abschalten? Die Nachricht vom "Doppelklick" auf einem Item kann ich abfangen, aber nicht das Expand ausschalten.

    Viele Grüße
    Andreas



  • bin mir auch nicht sicher, hatte allerdings damit schon zu tun gehabt und auch andere probleme mit der erweiterung.

    folgendermaßen habe ich es damals gelöst:
    beim doppelklick prüfen, ob das item children hat, wenn ja, dann das gegenteil vom aktuellen erweiterungsstatus ausführen.

    es ist zwar keine schöne lösung, und bei sehr vielen children flackert sie auch ein wenig, aber etwas anderes habe ich noch nicht gesehen.

    werde mich aber in der nächsten zeit mit einem anderen problem beschäftigen und das wieder aufgreifen, dann poste ich mal meine ergebnisse, vielleicht hilft das ja weiter.

    bei meinem tree soll immer nur ein punkt geöffnet sein, d.h. beim expandieren sollen sich andere punkte wieder schliessen.



  • Hi Alex,

    vielen Dank für die Antwort. So hat es funktioniert. Nur ist eine Sache unbedingt zu beachten:

    wenn nach ...ItemHasChildren(...) geprüft wird, welchen State das Item hat, so muss folgendes eingegeben werden:

    if( TreeControl.GetItemState(CurrentItem,TVIS_EXPANDED) & TVIS_EXPANDED )
    

    Ich hatte vorher eine Abfrage mit einem "==" statt des "&", diese Version hatte nicht funktioniert.

    Viele Grüße
    Andreas



  • hm, danke dir! gut zu wissen.



  • Hallo,

    so, jetzt bin ich mal wieder bei meinem TreeControl angekommen und habe ein weiteres Problem festgestellt.

    Wenn ich auf des +/- neben meinem Item klicke, kann ich das Item expanden / collapsen. Aber leider werden auch dann alle weitern Doppelklick-Aktionen ausgeführt. Wenn ich also auf das +/- Doppelklicke wird nicht nur expanded sondern auch das Bild vor meinem Item getauscht.

    Wie kann ich abfragen, ob das +/- oder tatsächlich das Item geklickt wird? Ich möchte beim +/- tatsächlich nur expanden/collapsen und bei dem Item nur das Bild tauschen.

    Viele Grüße

    Andreas



  • CTreeCtrl::HitTest

    Die sauberere Lösung wäre allerdings, das TreeCtrl zu subclassen, WM_DBLCLICK abzufangen und evtl. nicht an die Basisklasse weiterzugeben.

    Muß auch noch folgendes loswerden:
    Was mich am VSS-Client am meisten nervt (weil ich immer wieder drauf reinfalle) ist: Wenn ich ein Projekt (mit Unterprojekten) doppelcklicke, wird dieser nicht expandiert!

    Das verhalten ist sicher erträglich für eine Inhouse-Application. Andererseits sind es viele Leute gewohnt, in einem Windows-Baum mit einem Doppelclick ein "Verzeichnis" aufzumachen.



  • Hi,

    danke für die Antwort. Das HItTest Funktioniert, allerdings hatte ich vergessen den Cursor abzufragen, damit ich auch die richtige Position beim HitTest angeben kann. Habe ich jetzt nach einer Weile herumprobieren geschafft.

    Viele Grüße

    Andreas


Anmelden zum Antworten