Nachrichten außerhalb von WndProc verarbeiten



  • Ich versuche momentan eine Möglichkeit zu finden um auf Nachrichten außerhalb von WndProc zu reagieren. Hintergrund ist das dort wo ich PeekMessage aufrufe einige Instanzen sind die auf Nachrichten wie WM_ACTIVATE reagieren müssen, ich jedoch gerne auf globale Variablen bzw einen globalen Queue zum weiterleiten verzichten wolte. Ich habe mir zu diesem Zweck diese Konstelation überlegt.

    MSG msg;
    while(PeekMessage(&msg, nullptr,0 ,0 ,PM_REMOVE))
    {
    	TranslateMessage(&msg);
    	DispatchMessage(&msg);
    
    	if(msg.message == WM_QUIT);
    
    	if(msg.message == WM_ACTIVATE);
    };
    

    Mein Problem besteht darin das das if auf WM_QUIT ohne Probleme reagiert, das if auf WM_ACTIVATE reagiert jedoch überhaupt nicht obwohl WndProc das WM_ACTIVATE registriert.

    Bedingt durch diesen Fehler stellen sich mir die Fragen.
    Wieso funktioniert es mit der einen Nachricht und mit der anderen nicht?
    Würde diese Variante fehlerfrei funktionieren wenn ich die Nachrichten in WndProc verarbeite und WM_APP Nachrichten verschicke und auf diese in der obigen Form reagiere?
    Gibt es für dieses Problem noch eine andere bessere Lösung ohne die Nachrichten im Programm in einen globalen Queue zu stopfen?


  • Mod

    Weil es Nachrichten gibt, die in die Message Queue eingestellt werden (Input von Maus/Tastatur etc.) und Nachrichten, die direkt an die Fenster ausgeliefert werden. WM_CREATE/WM_DESTROY.

    Auch WM_ACTIVATE gehört dazu.



  • Besten Dank für die Aufklärung.


Anmelden zum Antworten