Probleme mit der Tastaturabfrage



  • Hi,
    ich versuche gerade die windows programmierung zu lernen und habe ein problem.
    Wenn ich den button anklicke kann ich nicht mehr abfragen ob eine taste
    gedrückt wurde
    Woran liegt es, wie kann ich es ändern?

    Hier der Code des Buttons

    case WM_COMMAND:
          {
    		hDC = GetDC(hWnd);
             if (lParam == (LPARAM)hButton)
             {
                if (HIWORD(wParam) == BN_CLICKED)
    			{
    
    			   sprintf( buffer , "   Integer:   %d\n", ausgabe );
    			   TextOut(hDC,0,300,buffer,strlen(buffer));
    
    			}
             }
    		 ReleaseDC(hWnd,hDC);
             return 0;
          }
    

    Hier der Code der Tastaturabfrage

    case WM_KEYDOWN:
          {
    
    		  switch (wParam)
             {
             case '\r':
                spieleranzahl=ausgabe;  
                break;
    
             case VK_LEFT:
    			ArrowKeys[0] = true;
    			wuerfel=true;
                break;
    
             case VK_UP:
                ArrowKeys[1] = true;
    			ausgabe+=1;
                break;
    
             case VK_RIGHT:
                ArrowKeys[2] = true;
                break;
    
             case VK_DOWN:
                ArrowKeys[3] = true;
    			ausgabe-=1;
                break;
    			         default:
                return 0;
             }
    


  • Ich nehme mal an, dass das daran liegt, dass nach dem Anklicken des Buttons dieser den Fokus erhält und somit die Tastatur-Eingaben an den Button gehen. Du müsstest also mit SetFocus den Fokus wieder auf dein Haupt-Fenster zurücksetzen 🙂



  • Danke, aber kannst du mir auch ein beispiel geben wo und wie ich es hinschreiben soll? Ich hab auf der MSDN Seite nach dem SetFocus gesucht kann aber mit der beschreibung dort nichts anfangen



  • Über WM_COMMAND die BN_CLICKED-Benachrichtigung abfangen und dann mit SetFocus wieder den Fokus auf dein Hauptfenster setzen.
    Irgendwie so müsste das dann wohl aussehen:

    case WM_COMMAND:
      if(HIWORD(wParam) == BN_CLICKED) {
        SetFocus(hWnd);
        return 0;
      }
      else {
        break;
      }
    

Anmelden zum Antworten