2011-10-14 13 views
11

Mam Win32 HWND i chciałbym umożliwić użytkownikowi kontrolę i lewy przycisk myszy, aby przeciągnąć okno dookoła ekranu. Biorąc pod uwagę (1), że mogę wykryć, gdy użytkownik ma kontrolę, lewy przycisk myszy i porusza myszą, oraz (2) Mam nową i starą pozycję myszy, jak używać interfejsu Win32 API i mojego HWND do zmiany pozycja okna?Jak zastosować przeciąganie okna przy użyciu jego obszaru roboczego?

Odpowiedz

31

Zaimplementuj procedurę obsługi komunikatów dla WM_NCHITTEST. Wywołaj DefWindowProc() i sprawdź, czy zwracana jest wartość HTCLIENT. Zwróć HTCAPTION, jeśli tak jest, w przeciwnym razie zwróć wartość zwracaną DefWindowProc. Możesz teraz kliknąć obszar klienta i przeciągnąć okno, tak jak przeciągasz okno, klikając nagłówek.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
    case WM_NCHITTEST: { 
     LRESULT hit = DefWindowProc(hWnd, message, wParam, lParam); 
     if (hit == HTCLIENT) hit = HTCAPTION; 
     return hit; 
    } 
    // etc.. 
} 
+0

jest poprawna odpowiedź –

+0

czekać ... jeśli jest to możliwe do okien potomnych ... Jestem zaskoczony ... – Dmitry

+0

Nie tylko, że można na przykład powrót jedną z wartości brzegowych, jak i HTBOTTOMRIGHT teraz otrzymujesz kursor zmiany rozmiaru i możesz go powiększyć lub zmniejszyć, przeciągając róg. Moc. –

Powiązane problemy