OnKeyDown() funzt net
-
Hallo zusammen,
versuche gerade Tastatureingaben abzufragen in einem Dialog.
Habe die schon mit der Maus gemacht, dort hat es funktioniert.Frage die Message WM_KEYDOWN ab um sie im On KeyDown() zu behandeln, leider kommt keine Message an, wenn ich eine Taste drücke.
Kann mir jemand sagen was ich falsch mache?
Vielen Dank.
-
Hat Dein Dialog den Keyboard-Focus?
-
Uih, keine Ahnung.
Wie kann ich das feststellen?
Und wenn es nicht so ist, wie kann ich das einstellen?
-
Die Tastatureingaben werden afaik immer von dem Dialog-Element (Button, Textbox,...) behandelt, das gerade den Fokus besitzt. Also muß das Element auch darauf reagieren.
(PS: Wenn es dir um bestimmte Tasten geht, die du behandeln willst, leg dir Accelarators dafür an)
-
Such mal nach PreTranslateMessage.
Da sollten einige Beispiele zu finden sein, wie man auf Tastatureingaben reagiert.
-
Mit GetAsyncKeyState kann man auf Tastatureingaben reagieren, auch wenn das Fenster keinen Fokus hat.
-
Sorry, aber ich kann damit nix anfangen.
PreTranslateMessage funktioniert auch nicht.Es kann doch nicht so schwer sein, ne Tasteneingabe abzufragen....
-
Okay, jetzt kann ich zwar die Message abfragen, aber der Dialog ist eingefroren.
Woran liegt das denn nun wieder?
-
Es ist auch nicht schwer, aber es kann sein, daß sich das "Framework" (MFC) die Nachricht nicht weiterleitet.
-
Warscheinlich hast Du keinen Thread gemacht.
-
Muss das in nem eigenem Thread laufen?
-
Scalls schrieb:
Okay, jetzt kann ich zwar die Message abfragen, aber der Dialog ist eingefroren.
Woran liegt das denn nun wieder?Zeig mal, was du machst, wenn du die Taste drückst.
-
Folgendes:
BOOL CEditorDlg::PreTranslateMessage( MSG* pMsg ) { if(pMsg->message==WM_KEYDOWN) { AfxMessageBox("Gedrückt"); return CDialog::PreTranslateMessage(pMsg); } return CDialog::PreTranslateMessage(pMsg); }
-
Du solltest nicht mehr "PreTranslateMessage" aufrufen; FALSE zurückgeben.
-
Oh man, dickes Merci, es funzt endlich.
Vielen Vielen Dank.
-