Frage zur Auswahl in Treeview
-
Hallo Forum,
ich habe ein Treeviewfenster. Bei normaler Abarbeitung (ich meine damit die Abarbeitung durch die "DefWindowProc") der Mausevents, Klick auf Items oder auch Pfeil-hoch/runter Taste und Checkboxauswahl mit "SPACE" wird der Item mit der "selectionmark" versehen und der Tree öffnet sich an der entsprechenden Stelle und schließt sich an anderer Stelle. Das Öffnen und Schließen stört mich, diese Aktion soll nur durchgeführt werden wenn vor dem Item das +/- Kästchen geklickt wird, jedoch soll weiterhin der geklickte Item die "selectionmark" erhalten. Also wenn ich den Event "TVN_SELCHANGING" abfange und mit "return 1" der "DefWindowProc" entziehe, dann habe ich kein ungewolltes Öffnen und Schließen der Zweige mehr, leider habe ich dann auch keine "Selectionmark". Beim Listview den ich in einem andern Childfenster benutze kann ich mit "LVM_SETSELECTIONMARK" die Selectionmark setzen, beim Treeview gibt es dafür keine Message. Kann mir jemand einen Rat geben wie ich es bewerkstellige das es so funktioniert wie ich es gerne hätte
-
Ok hab die Lösung, Nachricht "TVN_ITEMEXPANDING" abfangen und nach meinen Vorgaben bearbeiten. Habe aber jetzt ein neues Problem. Um ungewollte Eingaben am Treeview wären einer bestimmten Processabarbeitung zu unterbinden benutze ich folgend Code in meiner Eventhandle Procedur
case TVN_KEYDOWN: if(thread_is_working == TRUE){ return 1; } if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_SPACE){ SpaceSelection_on_Tree(); break; }Alle keyboard Eingaben werden nun bei "thread_is_working == TRUE" geblockt, jedoch kommt trotzdem irgendwie die Space taste durch und zwar wird die Checkbox vor dem Treevieitem getoggelt wen man Space drückt. Ist mir unverständlich, git es da noch eine übergeordnete bedienebene?
-
Du kannst die Änderung der Checlbox über TVN_ITEMCHANGING abblocken.
Evtl. haben die Entwickler die Space Taste in diesem Fall nicht vorher per TVN_KEYDOWN Taste abgefragt.
Die ..N_KEYDOWN Notifications benutze ich nie. Wenn ich Tastatureingabe Blocke, dann direkt über WM_CHAR oder WM_KEYDOWN! (Per Subclassing).
-
Jo danke erstmal für den Versuch mir zu helfen, aber "TVN_ITEMCHANGING" oder "TVN_ITEMCHANGED" geht laut MSDN erst ab Vista und mein MS VC6 Compiler schluckts auch nicht. "WM_CHAR" oder "WM_KEYDOWN" abzufangen hat nicht geklappt, der treeview befindet sich in einem Childfenster.