BM_SETCHECK ohne WM_COMMAND
-
mit bools arbeiten
-
Im Prinzip kann man einen Hook f?r eigenes Programm stellen und praktisch
alle WM_COMMAND Nachrichten abfangen und nur die weiter schicken, die keine
unerw?nschten Werte beinhalten. Aber ich denke, dass es noch komplizierter
wird, als mit Bools zu arbeiten.
-
Du kannst den Button natürlich auch Subclassen und die WM_COMMAND Nachricht irgendwie verhindern. Aber das bringts doch nicht.
-
Die Frage ist, was du in WM_COMMAND machst!
-
Aaaaaalso es ist so dass ich alle gerade laufenden Fenster in einem Baum darstelle. Wenn man ein Element im Baum anklickt soll rechts davon eine CheckBox anzeigen, ob das dazugehörige HWND grade enabled ist oder nicht. D.H. wenn man in den Baum klickt wird das Häckchen gesetzt, was dann eben den WM_COMMAND auslöst. Aber da man die Eigenschaft des Fensters mit der CheckBox ja auch verändern können muss, frage ich WM_COMMAND ab und enable je nach Häckchenzustand das HWND.
Man klickt also in den Baum, das Häckchen wird eingestellt, sendet gleichzeitig eine Nachricht und stellt sich dadurch dann wieder zurück.Ach ich blicks selbst nicht mehr, aber es kann doch nicht so schwierig sein, das ist doch ein alltägliches Problem! Im Notfall muss ich die WM_COMMANDs halt doch mit bool's sperren.
-
Ich würd emit Bools in nem Array arbeiten. Ist doch nicht so kompliziert!
Jeder Ast wird durch ein Element im Array repräsentiert. Du reagierst jetzt nurnoch auf die WM_COMMAND nachrichten und passt dementsprechend die Elemente im Array an. Wenn die Anzeige erfolgen soll holst du den Wert aus dem Array raus und setzt die checkbox auf an bzw. aus...
-
Wie deaktivierst du ein Handle bitte sehr?
-
Ich schätze, er meint mit "enabled", dass das Fenster sichtbar ist. Ich verstehe aber das Problem nicht. OK, sagen wir, du klickst auf den Baum. Ist das Fenster sichtbar, dann aktivierst du den Haken eben. Er geht dann in WM_COMMAND. Da sagst du dann dem Fenster, dass es sichbar gemacht werden soll. Ist es zwar sowieso schon, aber egal. Und... was ist jetzt das Problem?
-
Also erstmal: mit 'enabled' mein ich schon enabled, also 'aktiv'. Kann man mit EnableWindow( hwnd, true/false) verstellen.
@WebFritzi: So hab ich mir das eigentlich auch gedacht, aber es geht nicht. WM_COMMAND wird bei einem Klick in den Baum sogar 2mal aufgerufen. Es bringt nix davon zu labern, am besten ich post mal ein bissl Code:
// es ist ein wenig Pseudo-Code mit drin dass es einfacher zu lesen ist. case WM_COMMAND: if( id == checkbox) { HWND hwnd = TreeViewGetSelectedWindow(); EnableWindow( hwnd, BST_CHECKED==SendMessage(g_hwndCheckBox,BM_GETCHECK,0,0)); } break; case WM_NOTIFY: if( klick_in_baum ) { HWND hwnd = TreeViewGetSelectedWindow(); if( IsWindowEnabled( hwnd ) ) SendMessage(g_hwndCheckAktiv,BST_CHECKED ,0,0); else SendMessage(g_hwndCheckAktiv,BST_UNCHECKED,0,0); } break;
Hoffentlich kann man es jetzt besser verstehen.
-
Versuch mal
EnableWindow( hwnd, BST_CHECKED==!SendMessage(g_hwndCheckBox,BM_GETCHECK,0,0));
-
Nein das hat leider auch nicht geklappt. Ich hab keine Lust mehr mich damit rumzustressen, ich verunstalte jetzt das Programm mit ein paar globalen Variablen und gut ist.
Danke an alle die geschrieben haben.