Auf Pfeiltasten reagieren



  • Also ich muss auf die Pfeiltasten (VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN) reagieren. Wieso reagiert WM_KEYUP und WM_KEYDOWN bei diesen Tasten nicht?
    Bei VK_SPACE geht es jedoch! Was mach ich falsch??

    Danke!
    cu para
    😃

    [ Dieser Beitrag wurde am 25.11.2002 um 13:37 Uhr von paranoiac.org editiert. ]



  • Zeig mal deinen Code, der bei WM_KEYDOWN ausgeführt wird.
    Das geht ganz sicher mit WM_KEYDOWN, ich habs eigentlich immer damit gemacht. 🙂



  • Ok:

    // on keydown
        case WM_KEYDOWN:
            af2KeyDown(lParam, wParam);
            return 0;
    
        // on keyup
        case WM_KEYUP:
            af2KeyUp(lParam, wParam);
            return 0;
    

    Dann die 2 Funktionen:

    // input (keydown)
    void af2KeyDown(LPARAM lParam, WPARAM wParam)
    {
        MessageBox(0, "KeyDown", 0, 0);
        af2Key[(int)wParam]=1;
    }
    
    // input (keyup)
    void af2KeyUp(LPARAM lParam, WPARAM wParam)
    {
        af2Key[(int)wParam]=0;
    }
    

    Laut

    // function to check for keys
    void af2CheckInput()
    {
        char buffer[2333];
        wsprintf(buffer, "VK_LEFT: %d", af2Key[VK_LEFT]);
        TextOut(af2Hero.hDC, 100, 100, buffer, strlen(buffer));
    
        if(af2Key[VK_LEFT]){
            af2Hero.ixPos-=10;
            MessageBox(0, "hallllllo", 0, 0);
        }
    }
    

    ist aber af2Key[VK_LEFT]=1 und "hallllllo" wird au net angezeigt.
    Bei VK_SPACE gehts aber

    Danke!
    cu para
    😃



  • sorry sorry sorry
    af2Key[VK_LEFT] ist natürlich 0 🙄 🙄
    sonst würde es ja gehen!!!

    cu para
    😃



  • Sollte vielleicht noch dazu sagen, dass sich das ganze in einem Dialog abspielt, also falls das was an der Tatsache, dass es icht geht ändern sollte...
    <edit>

    // on keydown
        case WM_KEYDOWN:
            MessageBox(0, "KEYDOWN", 0, 0);
            af2KeyDown(lParam, wParam);
            return 0;
    

    => Die MessageBox wird bei den Pfeiltasten nicht angezeigt, bei 'A' 'B' etc gehts aber...
    </edit>
    danke!
    cu para
    😃

    [ Dieser Beitrag wurde am 25.11.2002 um 14:26 Uhr von paranoiac.org editiert. ]



  • In einem Dialog...
    Kann es sein, dass die Pfeiltasten vom Dialogmanager von Windows verarbeitet werden, so wie Tab? Nur eine Vermutung, ich habe in einem Dialog nämlich noch nie die Pfeiltasten abgefragt.
    Warum machst du kein normales Fenster?



  • Original erstellt von cd9000:
    Warum machst du kein normales Fenster?

    Weil ich ein Dialogbasierte Anwendung habe...
    Kann man das den nicht irgentwie einstellen??

    Danke!
    cu para
    😃



  • ist hierfür mittlerweise eine lösung bekannt?

    thx slower



  • Ich weiß zwar nicht warum die Pfeiltasten nicht erkannt werden. Aber du könntest die Tasten in deiner UpdateFunktion über

    int keystate = GetKeyState( WM_LEFT );
    

    abfragen.



  • Zuerst musst du die Nachricht WM_GETDLGCODE verbarbeiten uns sagen, das Du überhaupt WM_KEYDOWN NAchrichten für Pfeiltasten bekommen willst. Danach sollte die Nachrichten bei WM_KEYDOWN auch ankommen. Allerdings bringst Du damit unter Umständen die Standardverarbeitung der Tasten durch Windows durcheinander.

    Ich glaube im Forum gabes mal einen Thread der erklärte, wie die Tasten in preTranslateMessage abfängt. Das wäre sicher die besser Lösung.


Anmelden zum Antworten