Forum: PC-Programmierung mfc OnKeyDown


von Udo (Gast)


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?

von ... (Gast)


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
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Udo (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.