CTreeCtrl

CodeFatal

Erfahrenes Mitglied
Moin Moin zusammen,

Ich hab da mal wieder nen Problem.

Diesmal geht es um das MFC-Objekt CTreeCtrl.
Da habe ich Checkboxen aktiviert und kann die auch mit SetCheck(), bzw GetCheck() abfragen und setzen... Weiterhin gibt es eine Funktion Akt() die mir meinen Dialog richtig darstellt (abhängig von den Checkboxen).
So weit so gut... Jetzt Reagiere ich aber auch auf NM_CLICK und mache da nen Hittest auf die Checkbox... Leider ist aber zu dem Zeitpunkt der Message die Checkbox noch nicht gesetzt. Ein Aufruf von Akt() führt damit also zu einem falschen Ergebnis. Und ein manuelles Setzen ebenfalls.

Daher meine Frage: Wie bekomme ich raus, ob eine Checkbox innerhalb eines Trees sich geändert hat?

Danke für eure Hilfe

Gruss Michael
 
Ich meine, die Item States würden sich erst beim Wieder-Loslassen der Maustaste ändern. Da müsste ein Prüfen bei WM_LBUTTONUP und dann das Item darunter (hat sich ja nur geändet, wenn die Maus noch über demselben Item ist) ausreichen.

Ich bin mir ziemlich sicher, dass es keine eigene Nachricht für das Check-Ändern gibt (die Checkboxen im TreeControl sind eine nachträglich rein-gehackte Sache die die Item Images missbrauchen).
 
Gute Idee,
nur sieht MicroDoof, das mal wieder anders... :rolleyes: das TreeCtrl ist nicht der Dlg und bekommt die Message WM_LBUTTONUP nicht.
Bzw. wie kann ich diese speziell dem Tree zuordnen?
Timer nur wegen dem will ich nicht unbedingt einsetzten. Und ein manuelles setzen->Akt()->manuelles rücksetzen... ist wohl auch alles andere als gut...

Gruss Michael
 
Ja, das ist leider etwas blöd, dass der Check-Status erst nach der Abarbeitung von NM_CLICK gesetzt wird.
Da du aber sowieso mit Hittest abprüfst, ob auf die Checkbox geklickt wurde, kannst du auf jeden Fall sicher sein, dass sich der Status ändert. Das heißt, du brauchst das Ergebnis von GetCheck() nur zu negieren, um den richtigen Status zu erhalten.
 
Das ist Klar, nur sollte die Akt() - Funktion nicht wissen von wo sie aufgerufen wurde... Die soll schliesslich von dem Gerade vorgefundenen Status ausgehen... Werd das wohl mal über die absolute Notlösung machen... Auch wenn ich da absolut nicht mit Glücklich bin.

Gruss Michael
 
Das WM_LBUTTONUP müsstest du über PreTranslateMessage abfragen, wenn du darüber gehen willst. Hatte ich vergessen zu erwähnen
 
Zurück