Wie verhindere ich, dass Windows blockiert Programm bei einem Fenster ziehen oder die Menü-Taste wird gedrückt?

Ich bin Neuling mit Win32, und ich verfolgt haben ein problem (wenn es aufgerufen werden kann, ein problem überhaupt) mit Windows blockiert Ihren Programm-Ablauf während der Veranstaltung, wenn ein Benutzer greift der Titelleiste des Fensters und zieht es auf den Bildschirm.

Ich habe keinen legitimen Grund, um dieses problem zu lösen, außer dass es mich stört. Ein paar Möglichkeiten, den Rahmen entfernen ganz, aber es scheint eine unbequeme hack. Einige Spiele (single player) nicht finden, das ein problem überhaupt. Ich habe gelesen, Sie jedoch, dass multiplayer-Spiele könnten Probleme auftreten, wenn das Programm einfriert, da es erwartet, dass die kontinuierliche Fluss von Informationen und können überwältigt werden, nachdem eine solche Verzögerung.

Ich habe versucht, das hinzufügen dieser zu meinem WindowProc

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 quick hack, außer dass ich beim mousedown-über das schließen-Symbol kann ich ziehen Sie die Maus Weg und gehen lassen, ohne Sie schließen das Programm, und während dieser Zeit, wenn das schließen-Symbol gedrückt wird, wird das Programm wieder gesperrt wird.

Außerdem, ich weiß nicht, wie Sie manuell fügen Sie den code notwendig, um das Fenster zu verschieben, wenn der Benutzer klickt auf die Titelleiste und ziehen die Maus. Für den Anfang ich weiss nicht, welche uMsg's und wParam's zu handhaben.

Meine Frage ist dann, wie kann ich das unterbinden blockiert während der Fall, wenn der Benutzer klickt unten die Schaltfläche beenden (oder minimieren/maximieren-buttons), während noch die Behandlung des Falles, wenn die Maus geklickt wird, und veröffentlicht, über die Schaltfläche, und wie kann ich dem Benutzer erlauben, zu verschieben, ziehen Sie das Fenster, ohne es blockiert das Programm (oder was für eine Nachricht wird gesendet, wenn die Titelleiste angeklickt wird, ohne dass es eine Schaltfläche oder Menü)?

Ich bin erstellen Sie das Fenster mit WS_SYSMENU | WS_MINIMIZEBOX.

Möchte ich noch das Programm zu reagieren, minimieren, maximieren und beenden Befehle.

Wenn multi-threading kann es beheben, dann ist das interessant, aber ich Frage mich, ob ich bekommen kann es arbeiten auf single-core-Prozessoren. Und ich habe gelesen, über die Haken, aber auf der MSDN-Seite ist immer noch schwer für mich zu interpretieren.

  • durch program is blocked ich denke, du meinst, Sie erhalten nicht alle windows-Meldungen, was genau meinst du mit it expects continuous flow of information? erwarten Sie, dass windows-Meldungen, WM_TIMER Nachrichten, info aus einem Hafen, ...?
  • Es ist nicht blockiert, Sie haben lediglich ein problem mit der Maus erfassen. Vermeiden Sie es, durch abfangen der Art von Nachrichten, die Notwendigkeit, eine Maus erfassen, um richtig zu arbeiten. Mit dem Spy++ - Dienstprogramm ist ein guter Weg, um zu sehen, diese Nachrichten und wissen, welche Sie wollen, selbst zu behandeln.
InformationsquelleAutor Leonardo | 2013-08-04
Schreibe einen Kommentar