2017-08-29 2 views
-3

Jetzt entwickle ich die App, um die Position des Fensters zurückzusetzen. Eine Sache zu beachten ist, dass ich den globalen Maus-Hook verwendet habe, um das Desktop-Maus-Ereignis zu hören. Global Maushaken funktioniert gut. Mein Problem ist, dass SetWindowPos() -Methode seltsam funktioniert. Das folgende ist mein Code:C++: Globale Maus haken und die Position des Fensters zurücksetzen

case WM_LBUTTONUP: 
    mouselbut_clicked = false; 

    if (mousewnd_drag) 
    { 
     TRACE("mouse - lbutton release\n"); 

     if (window_moved) 
     { 
      ::SetWindowPos(hWnd, 0, 0, 0, 500, 500, SWP_ASYNCWINDOWPOS | SWP_NOZORDER); 
      window_moved = false; 
     } 
    } 
    break; 

Wenn ich die app bauen, geht das Fenster in der oberen linken Ecke des Desktops, aber plötzlich kommt es zurück in die ursprüngliche Position zurück.

Möchten Sie mir helfen, dieses Problem zu lösen?

Antwort

0

Das Verschieben/Ändern der Größe eines Fensters bewirkt, dass DefWindowProc eine interne modale Schleife zum Verschieben oder Anpassen ausführt. Die Steuerung kehrt erst zur Anwendung zurück, wenn die Operation abgeschlossen ist und das genaue Verhalten und die Nachrichtenbehandlung nicht dokumentiert sind.

Haben Sie versucht, CallNextHookEx vor SetWindowPos anzurufen?

Als Hack können Sie versuchen, Ihren Anruf auf SetWindowPos zu verzögern, bis Ihr Hook zurückgekehrt ist (senden Sie eine Nachricht an Sie selbst oder verwenden Sie einen Worker-Thread).

Sie auch mit einem anderen Haken könnten versuchen, das Ende des Verschiebevorgangs zu fangen:

+0

Hey, Anders ich Frage mit Ihrer Antwort haben . Wenn Sie gesagt haben "Haben Sie versucht, CallNextHookEx vor SetwindowPos aufzurufen", können Sie mir mehr Details geben? –

+0

Und eine weitere Sache zu injizieren ist, dass, wenn ich die SetWindowPos-Methode in WM_LBUTTONUP case, nicht in If case, es funktioniert gut. Möchten Sie erklären, warum das passiert? –

+0

Ein Hook sollte normalerweise CallNextHookEx aufrufen, damit auch andere Hooks die Nachricht erhalten. Wenn ein anderer Haken auch etwas Ähnliches macht, würdest du nur "gewinnen", wenn du deine Aktion nach den anderen Haken ausgeführt hast. Wenn es nicht möglich ist, Ihre andere Frage zu beantworten, weil Sie nicht den gesamten Code gepostet haben. – Anders

Verwandte Themen