Modaler Dialog mit static control: WM_KEYDOWN empfangen



  • Hi!

    Wie kann ich WM_KEYDOWN in einem modal dialog process empfangen? Wenn er kein control hat, geht's. Aber sobald ich auch nur ein static control hinzufüge, gehts nicht mehr.

    😕



  • Es funktioniert, wenn ich das static control subclasse.
    Ist ja kein großes Ding, aber gibts nicht doch ne Alternative?



  • Noch was:

    Ich möchte wirklich alle virtual key codes abfangen können.
    Aber Tabulator, die Pfeiltasten, die Windows-Taste, F10, beide Enter... werden nicht abgefangen.

    Wie mache ich das?



  • Du könntest einen Hook (=>SetWindowsHookEx mit WH_KEYBOARD) verwenden, damit solltest du so ziemlich alles mitbekommen. Wird nur schwierig, wenn der entsprechende Thread noch mehr Toplevel-Fenster als nur den Dialog erstellt hat.



  • Geht das nicht noch anders?

    Mir kommt gerade, die Windowstasten und ALT brauche ich nicht.

    Wenn's nicht anders geht, erstelle ich halt einen modeless Dialog (und deaktiviere manuell den Parent?).

    😕



  • Afaik liegt das nicht an modal<->nicht modal, sondern daran, dass eigentlich immer ein Control (Child-Fenster) den Keyboard-Fokus hat und entsprechend auch die Nachrichten bekommt. Und so schwierig ist das mit dem Hook nicht, 10-15 Zeilen vielleicht (du brauchst ja keine extra DLL weil's dein eigener Dialog ist).



  • Wäre aber auch sicher nicht gut für AntiViren. Und das soll es aber. Wird ja ein friedliches Programm.

    Hab es mal mit einem nicht-modalen Dialog versucht... und siehe da, das static control bekommt nun alles (Plus ALT&F10 mit WM_SYSKEYDOWN).

    Hmm...


Anmelden zum Antworten