peinliche frage zu tasteneingabe
-
Hallo

ich hab mal ein programm geschrieben , wo ich durch
if key a
oder so sachen abfragen konnte aber wie ging das nochmal ???
ich meine nicht
if(getch = 123...)
sondern richtig das man Key A oder so eingeben muss aber wie ging das noch ?

MFG: Patrick Star

-
In der WinApi :
BOOL lp; if (keys['L'] && !lp) { //..... }
-
also ich glaube das musste in CASE WM_COMMAND:
aber da tut sich nix
-
CASE WM_CHAR
Der Tastenbuchstabe steht in wParam.
-
Also, du gehst wie folgt vor :
So initialisiserst du die Pfeiltasten :
-Oben in deinen Definitionen gibts du erstmal dies hier an :bool keys[256]; //Brauchste nämlich zur Initialisierung-Jetzt initialisierst du noch die keys- wenn es Pfeiltasten sind, in der
LRESULT CALLBACK WndProc-Anweisung :case WM_KEYDOWN: { keys[wParam]=TRUE; return 0; } case WM_KEYUP: { keys[wParam]=TRUE; return 0;}Wichtig: Die Pfeiltasten zu den beiden Seiten rechts und links brauchst du nicht ein inden, dass maht bool keys[256]; automatisch !
Die Abfrage kannst du dann trotzdem stellen, lautet dann aber auch so :if(keys[VK_RIGHT]) { //....../// ]So, jetzt weisst du wie das mit den pfeiltasten ging !
________________________________________________________Jetzt kommen normale Tasten :
-Zuerst initialisierst du wieder die Tasten mit folgendem Code häppchen :bool keys[256];-Jetzt initialisierst du die einzelne Taste (Auch da, wo sich die Definitionen befinden ;-):
bool keys[256]; //Initialisiert wieder die Tasten ! BOOL lp; //Initialisiert die einzelne Taste 'L', also das was vor dem p steht gilt als Taste und wird initialisiert-Jetzt kannst du einfach die Taste abfragen, das geht so :
if (keys['L'] && !fp) { MessageBox(NULL,"Taste "L" wurde gedrückt","Option",MB_OK); return FALSE; }
-
könntet ihr mir mal ein kleinen code geben ? wenn ich das immer mache kommt:`fp' undeclared (first use this function)
cannot convert `const wchar_t*' to `const CHAR*' for argument `2' to `int MessageBoxA(HWND__, const CHAR, const CHAR*, UINT)'
-
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static RECT rect; static bool ArrowKeys[4]; switch (message) { case WM_SIZE: { rect.right = LOWORD(lParam); rect.bottom = HIWORD(lParam); return 0; } case WM_KEYDOWN: { switch (wParam) { case VK_LEFT: ArrowKeys[0] = true; break; case VK_UP: ArrowKeys[1] = true; break; case VK_RIGHT: ArrowKeys[2] = true; break; case VK_DOWN: ArrowKeys[3] = true; break; default: return 0; } InvalidateRect(hWnd, NULL, FALSE); return 0; } case WM_KEYUP: { switch (wParam) { case VK_LEFT: ArrowKeys[0] = false; break; case VK_UP: ArrowKeys[1] = false; break; case VK_RIGHT: ArrowKeys[2] = false; break; case VK_DOWN: ArrowKeys[3] = false; break; default: return 0; } InvalidateRect(hWnd, NULL, FALSE); return 0; } case WM_PAINT: { PAINTSTRUCT ps; HDC hDC; SIZE size; char szKeyStatus[40]; int iKeyLength; hDC = BeginPaint(hWnd, &ps); for (int i = 0; i < 4; i++) { iKeyLength = wsprintf(szKeyStatus, "Status Taste %i: %i", i, ArrowKeys[i]); GetTextExtentPoint32(hDC, szKeyStatus, iKeyLength, &size); TextOut(hDC, rect.right / 2 - size.cx / 2, rect.bottom / 2 - 2 * size.cy + i * size.cy, szKeyStatus, iKeyLength); } EndPaint(hWnd, &ps); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); }Wenn du wirklich mal in der WinApi gecodet hast, solltest du Wissen welche Codestellen wichtig für die Beantwortung deiner Frage ist.
Viel Spass noch.