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. 👍


Anmelden zum Antworten