WM_KEYDOWN funktioniert nicht mehr nach Benutzen eines Buttons oder einer Editbox, help!



  • jo die vom mainWindow.. aber ich weiss nicht was ich da rein baun muss das das mit dem focus klappt


  • Mod

    T0bi schrieb:

    jo die vom mainWindow.. aber ich weiss nicht was ich da rein baun muss das das mit dem focus klappt

    Dann versuche zu verstehen was TranslateMessage, IsDialogMessage und TranslateAccelerator tun. Dann kommst Du vieleicht drauf...



  • also da ich nicht mit einem dialog arbeite brauch IsDialogMessage auch nicht, richt? hm anscheind muss ich dann also eine accel tabele anlegen... aber wie macht man sowas?
    Ok man braucht CreateAcceleratorTable() und ACCEL, wobei accel ein array sein muss oder? nur wo und wie mach ich definition von accel ?



  • Hm ich hab mich jetzt mal daran probiert aber es tut sich nichts, wenn ich die taste drücke. Hier mal die Teile wo ich jetzt was gemacht habe:

    (1) der header für die IDs

    ////////////////////////////////////////////////////////////////////////////////
    // ACCELERATOR
    
        #define ID_ACCEL_ESC                            7000
        #define ID_ACCEL_UP                             7001
        #define ID_ACCEL_DOWN                           7002
        #define ID_ACCEL_LEFT                           7003
        #define ID_ACCEL_RIGHT                          7004
    

    (2) die .rc datei

    ////////////////////////////////////////////////////////////////////////////////
    // ACCELERATOR
    
    accelTabel ACCELERATORS
    BEGIN
    
        VK_ESCAPE, ID_ACCEL_ESC
        VK_UP, ID_ACCEL_UP
        VK_DOWN, ID_ACCEL_DOWN
        VK_LEFT, ID_ACCEL_LEFT
        VK_RIGHT, ID_ACCEL_RIGHT
    END
    

    in der main .cpp datei

    // ...
    // ***** load accelerators *****
        hAccel = LoadAccelerators( hInstance, "accelTable" );
    
        while( !done ) {
    
    	    if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) {
    
                if( msg.message == WM_QUIT ) {
    
                    done = true;
    
                }
                else {
    
                    if( !( TranslateAccelerator( hWnd, hAccel, &msg ) ) ) {
    
                        TranslateMessage( &msg );
                        DispatchMessage( &msg );
                    }
                }
            }
        }
    // ...
    
    // in der command
    // ***** accelerators *****
                    case ID_ACCEL_UP: {
    
                        if( rX < 360.0f )
                            rX += 3.0f;
                        if( !bFull ) {
    
                            SetScrollPos( hScroll_rx, SB_CTL, rX, true );
                        }
                        break;
                    }
    
                    case ID_ACCEL_DOWN: {
    
                        if( rX > 0.0f )
                            rX -= 3.0f;
                        if( !bFull ) {
    
                            SetScrollPos( hScroll_rx, SB_CTL, rX, true );
                        }
                        break;
                    }
    
                    case ID_ACCEL_LEFT: {
    
                        if( rY > 0.0f )
                            rY -= 3.0f;
                        if( !bFull ) {
    
                            SetScrollPos( hScroll_ry, SB_CTL, rY, true );
                        }
                        break;
                    }
    
                    case ID_ACCEL_RIGHT: {
    
                        if( rY < 360.0f )
                            rY += 3.0f;
                        if( !bFull ) {
    
                            SetScrollPos( hScroll_ry, SB_CTL, rY, true );
                        }
                        break;
                    }
    

    hm was ist jetzt noch net richtig?



  • hab ich vieleicht die accelerator tabelle falsch definiert?


  • Mod

    T0bi schrieb:

    hab ich vieleicht die accelerator tabelle falsch definiert?

    Sieht gut aus!
    1. Wird hAccel geladen? Ich sehe keine Fehlerbehandlung!
    2. Bei TranslateAccelerator musst Du das Window Handle angeben, das die WM_COMMAND Handler für Deine Accelerator IDs beherbergt.
    3. Du hast dasin einem WM_COMMAND Handler eingebaut? Ich sehe diesen Codeausschnitt nicht!
    4. Nur am Rande. Warum verwendest Du PeekMessage und nicht GetMessage? Diese Messageloop frisst 100% Prozessor Ressourcen!



  • 1. Wird hAccel geladen? Ich sehe keine Fehlerbehandlung!

    Hm anscheind kann die Tabelle nicht gladen werden, Fehler:

    Der angegebene Ressourcenname wurde nicht in der Image-Datei gefunden.
    

    2. Bei TranslateAccelerator musst Du das Window Handle angeben, das die WM_COMMAND Handler für Deine Accelerator IDs beherbergt.

    hWnd ist das Handle vom main Window, in desen WM_COMMAND arbeite ich auch die IDs der accels ab.

    3. Du hast dasin einem WM_COMMAND Handler eingebaut? Ich sehe diesen Codeausschnitt nicht!

    wie meinst du das in einem WM_COMMAND handler? Ich habs lediglich nur in die WM_COMMAND unter switch LOWORD( wParam ) geschoben.

    4. Nur am Rande. Warum verwendest Du PeekMessage und nicht GetMessage? Diese Messageloop frisst 100% Prozessor Ressourcen!

    Sorry habs behoben, das is bei mir noch aus dem Tutorial von NeHe hängen geblieben.

    Also alle sin allem scheints beim laden der Tabelle die Probleme zu geben. Muss ich da irgendwie mit MAKEINTRESOURCE arbeiten?

    Gruß Tobi.


  • Mod

    Entschuldige aber langsam habe ich keine Lust mehr...
    Muss man jede Zeile Code bei Dir diskutieren?
    Lies den Petzold und lerne.

    1. Das mit dem Handler meinte ich, dass Du das als WM_COMMAND Nachricht bekommst. Ich konnte nicht sehen auf welche Nachricht Du reagierst.

    2. Dann ist die Table nicht in Deiner EXE. Lade die fertige EXE mit dem Ressourcen-Editor.



  • ihat der bcb6 überhaupt nen recourssen editor? der hat doch nur nen image editor net mehr.
    Egal habs jetzt hin bekomm das er die Tablle erfolgrich lädt... passiern tut trotzdem nicht...



  • OKay ich nehme alle zurück, ich danke dir wirklich vielmals für deine mühe Martin, jetzt klappt alles 🙂

    Danke.

    Gruß Tobi.


Anmelden zum Antworten