Tastenpuffer löschen?
-
Hallo,
in meinem Programm habe ich eine Funktion in der ich in einer Schleife einige Tasten abfrage und darauf reagiere. Wenn ich diese Schleife mit der A-Taste (Abbruch) verlasse rufe ich noch eine Messagebox auf und gehe danach in einen Dialog. Wenn ich jedoch während der Schleife ESC drücke wird die Messagebox übersprungen, und sogar die dialog gleich wieder verlassen wenn ich mehrmals ESC gedrückt haben sollte. Wie kann ich das verhintern. Kann ich die ESC-Anschläge aus dem Puffer löschen?
Vielen Dank schon mal für Ratschläge.
Ich programmieren in VC++ 6.0 unter Windows.
Hier noch der bisherige Codeausschnitt...while (1) { // Taste einlesen SHORT keyEnter = GetAsyncKeyState( VK_RETURN ); if (keyEnter) break; SHORT keyAbbruch = GetAsyncKeyState( 65 ); if (keyAbbruch) { AfxMessageBox( "..."); return true; } SHORT keyU = GetAsyncKeyState( VK_UP ); SHORT keyD = GetAsyncKeyState( VK_DOWN ); SHORT keyL = GetAsyncKeyState( VK_LEFT ); SHORT keyR = GetAsyncKeyState( VK_RIGHT ); if (keyU) {...} if (keyD) {...} if (keyL) {...} if (keyR) {...} } ...
-
Das ist Quatsch.
Benutze die WM_KEY... Nachrichten des Windows Systems.
-
Angel_RF schrieb:
Wie kann ich das verhintern.
Schon jetzt ein Klassiker!

-
@_matze: ja.. ähm.. ich fands gestern nun mal leicht besch.. das Problem.

@Martin: Könntest du das bitte etwas genauer beschreiben? Ich habe mir in der OnKeyDown()- Funktion einfach mal was ausgeben lassen. Aber leider funktioniert das nur solange ich nicht in der Funktionmit der schleife bin.
-
Hallo nochmal.
ich formuliere meine Frage und Quelltext etwas um, damit das GetAsyncKeyState weg ist...
Wie kann ich verhindern, dass eine Nachricht oder ein Dialog aufgrund einer gepufferten Tastatureingabe sofort weggeklickt wird. Wenn ich während der Schleife im unteren Quelltext ESC drücke wird die nachfolgende Nachricht übersprungen.
Der Quelltext is net wirklich sinnvoll, aber er soll ja nur mein Problem darstellen.int counter = 0; while (1) { Sleep (100); counter ++; if (counter > 20) break; } AfxMessageBox( "...");
-
Indem Du eine PeekMessage auf alle WM_KEYFIRST bis WM_KEYLAST ausführst und sie aus der Nachrichtenschleife entfernst... (PM_REMOVE)
-

jo, klappt. Danke!