OnKeyDown für cursortasten
-
hi!
Die Cursortasten der Tastatur lösen kein OnKeyDown Ereignis aus, sondern lediglich ein OnKeyUp!? Ich habe so eine kleine Snake Variante Programmiert und da stört das, wenn sich die Schlange erst nach dem zurückfedern der Taste bewegt...
Wie löse ich dieses Problem?danke
matthias
-
Die Cursortasten der Tastatur lösen kein OnKeyDown Ereignis aus
Doch, muss ein Fehler in Deinem Programm sein!
-
VK_Right, VK_Left, VK_Up, VK_Down sind imho die Cursortasten.
Devil
-
Ich habe um absolut sicher zu gehen ein MessageBeep(MB_OK) in der OnKeyDown platziert. Bei jeder (ausser natürlich shift & co) Taste beept er, nur nicht bei VK_RIGHT, left usw.
Bei euch geht das? SICHER?
-
Ja, sicher ...
Von welchem Fenstertyp ist Dein Fenster abgeleitet?
-
von einem ganz normalen CWnd...
-
Hast Du vielleicht WM_CHAR statt WM_KEYDOWN in der MessageMap stehen?
-
Die Messagemap:
BEGIN_MESSAGE_MAP(CSnakeDlg, CDialog) //{{AFX_MSG_MAP(CSnakeDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() ON_WM_KEYDOWN() ON_WM_KEYUP() //}}AFX_MSG_MAP END_MESSAGE_MAP()
und der betreffende Code:
void CSnakeDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { MessageBeep(MB_OK); CDialog::OnKeyDown(nChar, nRepCnt, nFlags); }
Der Beep kommt bei allen Standardtasten, nur nicht bei links, recht, rauf und runter. CSnakeDlg ist ein ganz normaler, komplett leerer MFC Dialog.
Hat irgend jemand noch eine Idee?
danke
matthias
-
check mal die api-function "GetAsyncKeyState" - mit der iss alles möglich !!!
-
CDialog ist auch kein 'normales' Fenster.
MSDN:When IsDialogMessage processes a message, it checks for keyboard messages and converts them into selections for the corresponding dialog box. For example, the TAB key, when pressed, selects the next control or group of controls, and the DOWN ARROW key, when pressed, selects the next control in a group.
Das heisst also, Deine Message wird in einem Dialog schon vorher rausgefiltert!