Hallo Ihr, ich versuche derzeit mit einem MFC Dialog die Tasten einzulesen um dann einer Schaltung Befehle zu senden. Jetzt hab ich der Meldung WM_KEYDOWN einen Handler hinzugefügt: OnKeyDown(..) In dieser Funktion switch ich die Variable nChar nach den in der MSDN stehenden Tasten (VK_UP usw...). Jetzt hab ich MessageBox für jede Taste eingesetzt, um zu sehn, ob die TAsten angekommen sind. Aber es springt einfach NIE in diese Funktion... Was mach ich Falsch? hat jemand eine Ahnung?
Udo schrieb: > Was mach ich Falsch? Die WM_KEYDOWN Message kommt bei dem Control in Deinem Dialog an, das den Focus hat aber nicht im Dialog selbst. Da kommt dann eine WM_COMMAND oder WM_NOTIFY Message an. Je nach Control sehen die dann auch noch unterschiedlich aus. Kurz gesagt Dein Handler ist für die verkehrte Message. Das einfachste dürfte sein, in Deinem Dialog die PreTranslateMessage Funktion zu überschreiben, dort die gewünschten Tasten abzufangen und ansonsten die Baseclassversion davon aufzurufen. Z.B. so etwa (ungetestet!):
1 | BOOL YourDlgClass::PreTranslateMessage(MSG* pMsg) |
2 | {
|
3 | if(pMsg->message == WM_KEYDOWN) |
4 | {
|
5 | switch(pMsg->wParam) { |
6 | case VK_UP: |
7 | // do something
|
8 | return TRUE; |
9 | case VK_DOWN: |
10 | // do something else
|
11 | return TRUE; |
12 | // ...
|
13 | }
|
14 | return CDialog::PreTranslateMessage(pMsg); |
15 | }
|
OnKeyDown ist also Member einer von CDialog abgeleiteten Klasse? Solange eines der Controls im Dialog den Focus hat, bekommt das Parent-Window (hier also der Dialog) keine entsprechenden Events gesandt. Das ist normalerweise auch kein Problem, in normalen Dialogen ist so etwas nicht erforderlich. Was genau möchtest Du erreichen?
Naja wie schon gesagt, ich habe ein Programm welches aus einem Dialog besteht. Jetzt will ich (der Dialog ist im Vordergrund) die Pfeiltasten drucken, damit eine Schaltung etwas macht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.