Treeview - Un/Check eines Item mit allen SubItem (rekursiv)

    • Offizieller Beitrag

    Das Thema klingt banal, ist programmtechnisch auch banal. Aber das Problem kommt beim Klick.
    Im Normalfall wird beim Klick auf eine Checkbox nur diese un/checked. Im Treeview ist es natürlich sinnvoll dann auch alle untergeordneten Item zu un/checken.
    Es gibt jedoch keine Möglichkeit abzufragen, ob auf die Checkbox geklickt wurde, weil das Event CLICK dem Event CHECK vorausgeht. Über die HitItem Funktion kann ich das Item welches geklickt wurde, ermitteln. Wenn ich die Funktion zweimal aufrufe mit unterschiedlichen Parametern, weiß ich auch, ob ich nicht auf den Text geklickt habe.
    Aber ich kann dann trotzdem nicht unterscheiden, ob ich die Checkbox oder (wenn vorhanden) die Node geklickt habe. Da ich die normale Verarbeitung der Messages im TV unterbinden muß, kann ich zwar mein un/checken ausführen, aber das passiert auch beim Klick auf Node und die Funktion des Node geht verloren.
    Belasse ich die Standardverarbeitung der Message, funktioniert Node (wird auch gleich als Klick auf die Checkbox gewertet) aber kein Klick auf die Checkbox selbst.

    Hier mal als Bsp., gebt bei $sPathRoot einen Pfad ein, der zum Lesen einer Ordnerstruktur verwendet werden soll.

    Falls ihr einen Workaround habt - nehme ich gern entgegen.


    Edit:
    Habe gerade gesehen, dass über Hittest noch brauchbare Infos kommen. Werde ich gleich mal umsetzen. Sieht vielversprechend aus.

  • BugFix : ich habe mehrmals deinen Text durchgelesen, aber verstehe das Problem nicht ganz! Das Geklicke soll nur funktionieren, wenn ich auf die Checkbox klicke und nicht auf den Text?

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    • Offizieller Beitrag

    Habe die Lösung gefunden mit Hittest.

    Spoiler anzeigen


    UEZ: Das Problem war zu erkennen ob Node geklickt wird (dann soll natürlich NUR ein/ausgeklappt werden) oder ob Checkbox geklickt wird (NUR DANN soll auch rekursiv un/checked werden) oder Text.
    Dank der Funktion _GUICtrlTreeView_HitTest habe ich jetzt alle erforderlichen Infos dafür.

    Trotzdem Danke fürs Mitdenken.

    • Offizieller Beitrag

    Benutze mal diese "WM_NOTIFY":

    • Offizieller Beitrag

    Kann man 3state für Checkboxen in Treeviews verwenden?

    Ich würde sagen ja, wenn ich die möglichen Flags und Parameter der TV-Strukturen betrachte.
    Werde das bei Gelegenheit mal näher anschauen.

    Edit:
    Ja, es geht so:

    Zitat von MSDN

    TVITEM structure


    A state image is displayed next to an item's icon to indicate an application-defined state. Specify the state image list by sending a TVM_SETIMAGELISTmessage. To set an item's state image, include the TVIS_STATEIMAGEMASK value in the stateMask member of the TVITEM structure. Bits 12 through 15 of the structure's state member specify the index in the state image list of the image to be drawn.