MSG message member



  • Irgendwie bin ich gerade ein wenig blöd...
    In der MSDN ist folgendes Beispiel:

    HWND hwnd; 
    BOOL fDone; 
    MSG msg; 
    
    // Begin the operation and continue until it is complete 
    // or until the user clicks the mouse or presses a key. 
    
    fDone = FALSE; 
    while (!fDone) 
    { 
        fDone = DoLengthyOperation(); // application-defined function 
    
        // Remove any messages that may be in the queue. If the 
        // queue contains any mouse or keyboard 
        // messages, end the operation. 
    
        while (PeekMessage(&msg, hwnd,  0, 0, PM_REMOVE)) 
        { 
            switch(msg.message) 
            { 
                case WM_LBUTTONDOWN: 
                case WM_RBUTTONDOWN: 
                case WM_KEYDOWN: 
                    // 
                    // Perform any required cleanup. 
                    // 
                    fDone = TRUE; 
            } 
        } 
    }
    

    Bei mir klappt das aber mit dem switch nicht.
    Da kommen komplett andere Zahlencodes an, als die eigentlichen Event-Nachrichten!
    In der MSG-Referenz steht, dass man das lowbyte verwenden soll, allerdings klappt das dann auch nicht.
    Ich will die gleichen Werte haben, die auch in der Window-Prozedur als UINT-Parameter ankommen.
    Wie geht das?



  • Das geht nur mit einigen Nachrichten. Zum Beispiel wirst du auf diese Weise nie ein WM_CHAR bekommen, weil das keine normale Nachricht, sondern eine von TranslateMessage aus WM_KEYDOWN und WM_KEYUP zusammen gebaute ist. Wahrscheinlich wird deine Nachricht auch erst von TranslateMessage erzeugt und kommt damit nie in den switch.


Anmelden zum Antworten