Tasten Eingabe
-
cd9000 schrieb:
Schon mal in der PlatformSDK-Doku nachgeschaut?
dafür ist mein Platte zu voll
aber *mich mal in ne ecke stell und schäm*
ich hab mal im Petzold überflogen und genau das gemacht was dort mit // FALSCH !!! beschrieben wurde...jetzt hab auch ich es hinbekommen!
Ja man sollte schon lesen sich nicht nur den code angucken *gg*
-
oops noch mal ordentlich:
cd9000 schrieb:
Schon mal in der PlatformSDK-Doku nachgeschaut?
dafür ist mein Platte zu voll
aber *mich mal in ne ecke stell und schäm*
ich hab mal im Petzold überflogen und genau das gemacht was dort mit // FALSCH !!! beschrieben wurde...jetzt hab auch ich es hinbekommen!
Ja man sollte schon lesen sich nicht nur den code angucken *gg*PS: wer wissen will wie:
case WM_KEYDOWN: switch(wParam) { case VK_UP: //up break; case VK_DOWN: if (GetAsyncKeyState(VK_RIGHT) & (1 << 15)) { //down and right } else { //down }; break; case VK_LEFT: //left break; case VK_RIGHT: if (GetAsyncKeyState(VK_DOWN) & (1 << 15)) { //right and down } else { //right } break; }; break;
PPS: Ich nehm Async weil:
Zitat (Petzold): "Wenn das Programm eine Nachicht mit gehöriger Verspätung
bearbeitet, liefert GetKeyState gegebenfalls auch dann "gedrückt",
wenn der Benutzer diese Taste in der Zwischenzeit schon längst wieder gelöst hat."
-
Genau das willst du aber doch erreichen
Angenommen du erhältst diese Nachricht sehr spät, dann willst du doch wissen, ob während der damals gedrückten Taste die andere auch gedrückt wurde. Mit Async kann es dir passieren, dass dein Programm meint, dass zwei Tasten gleichzeitig gedrückt wurden, obwohl du nach dem Loslassen der ersten Taste die zweite gedrückt hast, aber durch die Verspätung der Bearbeitung der ersten Nachricht die Tastenkombination erkannt wird. Also entweder alles mit Async oder nichts
-
jetzt verwirr doch nich noch den alten Mann...
vorallem die letzte bemerkung "Also entweder alles mit Async oder nichts"
ich mach doch alles mich async?! oder soll ich jetzt auch noch sowas wie WM_ASYNCKEYDOWN hinfrickeln?!hm.. ok also soll ich jetzt lieber ohne async (bei getkeyblaa) arbeiten oder wie
MfG ein leicht verwirrter foool
-
Ich habe jetzt 100 Varianten ausprobiert und ich bin verzweifelt...:
Egal was ich mache es geht schon nur nicht ganz, denn wenn ich zuerst die "nack-oben-Taste" drücke und festhalte dann die "nach-links-Taste" auch festhalte bekomm ich ein "oben-links" so wie es ein soll! nur wenn ich jetzt die "nach-links-Taste" loslasse bekomm ich kein "oben" sondern nix..
jetzt das doofe:
mache ich es umgekehrt also erst die "nach-links-Taste" festhalten, dann die "nach-oben-Taste" auch festhalten (ein korrektes "oben-links" erhalten), dann die "nach-links-Taste" loslassen und ich bekomm ein "oben"!
-
Du könntest auch noch versuchen - weiß nicht, ob das wirklich was ändert - das switch(wParam) ganz wegzulassen und beide Tasten über GetKeyState abzufragen
Kommt er denn in dem Fall, wo er gar nichts macht in das WM_KEYDOWN?
-
switch weglassen hab ich auch schon versucht aber geht auch nicht
leider hat sich mein Programm jetzt in luft ausgelöst und nun funzt überhaupt nichts mehr
-
So wie ich das sehe bekommst du eben immer für die zuletzt gedrückte Taste das WM_KEYDOWN
Wie sieht denn jetzt dein vollständiger WM_KEYDOWN-Code aus?
-
ein zusammengefrickelter code:
case WM_KEYDOWN: if (GetKeyState(VK_RIGHT) & (1 << 15)) { ++x; } else if (GetKeyState(VK_LEFT) & (1 << 15)) { --x; } else if (GetKeyState(VK_UP) & (1 << 15)) { --y; } else if (GetKeyState(VK_DOWN) & (1 << 15)) { ++y; } else if (GetKeyState(VK_DOWN) & (1 << 15) && GetKeyState(VK_LEFT) & (1 << 15)) { x -= 10; y += 10; InvalidateRect(hwnd,NULL,TRUE); } else if (GetKeyState(VK_DOWN) & (1 << 15) && GetKeyState(VK_RIGHT) & (1 << 15)) { x += 10; y += 10; InvalidateRect(hwnd,NULL,TRUE); } InvalidateRect(hwnd,NULL,TRUE); break; case WM_PAINT: hdc = BeginPaint(hwnd,&ps); Rectangle(hdc,x,y,x+15,y+15); EndPaint(hwnd,&ps); break;
-
Funktioniert der jetzt, oder was ist damit