Wie verhindere ich, dass Windows das Programm blockiert, während ein Fenster gezogen oder eine Menütaste gedrückt wird?

Ich bin Anfänger mitWin32Ich habe ein Problem (wenn es überhaupt als Problem bezeichnet werden kann) mit Windows, das den Programmfluss während des Ereignisses blockiert, wenn ein Benutzer die Fenstertitelleiste ergreift und sie auf dem Bildschirm bewegt.

Ich habe keinen berechtigten Grund, dieses Problem zu lösen, außer dass es mich stört. Einige Möglichkeiten beinhalten das Entfernen des Rahmens insgesamt, aber es scheint ein unangenehmer Hack zu sein. Bei einigen Spielen (Einzelspieler) ist dies überhaupt kein Problem. Ich habe jedoch gelesen, dass Multiplayer-Spiele möglicherweise Probleme haben, wenn das Programm einfriert, da es einen kontinuierlichen Informationsfluss erwartet und nach einer solchen Verzögerung überfordert sein kann.

Ich habe versucht, dies zu meinem hinzuzufügenWindowProc

switch (uMsg)
{
    case WM_SYSCOMMAND:
        if (wParam == SC_CLOSE)
            PostQuitMessage(0);

        return 0;
    ...
    ...
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;

Und dies scheint ein schneller Hack zu sein, außer dass ich mit der Maus über das Schließsymbol hinwegziehen und loslassen kann, ohne das Programm zu schließen. Währenddessen wird das Programm erneut blockiert, wenn das Schließsymbol gedrückt gehalten wird.

Außerdem weiß ich nicht, wie ich den zum Verschieben des Fensters erforderlichen Code manuell einfügen soll, wenn der Benutzer auf die Titelleiste klickt und die Maus zieht. Für den Anfang weiß ich nicht welcheuMsgundwParamist zu handhaben.

Meine Frage ist dann, wie ich das Blockieren während des Vorgangs verbiete, wenn der Benutzer auf die Schaltfläche zum Beenden klickt (oder die Schaltflächen zum Minimieren / Maximieren), während der Vorgang weiterhin ausgeführt wird, wenn die Maus über die Schaltfläche geklickt und losgelassen wird, und wie ich das Blockieren zulasse Benutzer kann das Fenster verschieben / ziehen, ohne dass es das Programm blockiert (oder welche Nachricht wird gesendet, wenn auf die Titelleiste geklickt wird, ohne dass es sich um eine Schaltfläche oder ein Menü handelt)?

Ich erschaffe das Fenster mitWS_SYSMENU | WS_MINIMIZEBOX.

Ich möchte weiterhin, dass das Programm auf Befehle zum Minimieren, Maximieren und Beenden reagiert.

Wenn Multithreading das Problem beheben kann, ist das interessant, aber ich frage mich, ob ich es auf Single-Core-Prozessoren zum Laufen bringen kann. Und ich habe über Hooks gelesen, aber die MSDN-Seite ist für mich immer noch schwer zu interpretieren.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage