mfc OnKeyDown

Gast #2256220
Lesenswert?

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?
Gast #2256334
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren