2011-10-14 36 views
11

Tôi có một Win32 HWND và tôi muốn cho phép người dùng giữ quyền kiểm soát và nút chuột trái để kéo cửa sổ xung quanh màn hình. Cho (1) mà tôi có thể phát hiện khi người dùng nắm giữ điều khiển, nút chuột trái và di chuyển chuột, và (2) Tôi có vị trí chuột mới và cũ, cách sử dụng API Win32 và HWND của tôi để thay đổi vị trí của cửa sổ?Làm cách nào để triển khai kéo cửa sổ bằng khu vực ứng dụng khách?

Trả lời

31

Triển khai trình xử lý tin nhắn cho WM_NCHITTEST. Gọi DefWindowProc() và kiểm tra xem giá trị trả về có phải là HTCLIENT hay không. Trả về HTCAPTION nếu có, ngược lại trả về giá trị trả về của DefWindowProc. Bây giờ bạn có thể nhấp vào khu vực khách hàng và kéo cửa sổ, giống như bạn kéo một cửa sổ bằng cách nhấp vào chú thích.

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

là câu trả lời đúng –

+0

chờ đợi ... nếu điều này là có thể cho các cửa sổ con ... Tôi ngạc nhiên ... – Dmitry

+0

Không chỉ vậy, bạn có thể ví dụ như trở lại một trong những giá trị cạnh như HTBOTTOMRIGHT và bây giờ bạn có được một con trỏ thay đổi kích thước và có thể làm cho nó lớn hơn hoặc nhỏ hơn bằng cách kéo góc. Sức mạnh. –

Các vấn đề liên quan