2011-10-14 8 views
11

Tengo un Win32 HWND y me gustaría permitir que el usuario mantenga el control y el botón izquierdo del mouse para arrastrar la ventana alrededor de la pantalla. Dado (1) que puedo detectar cuando el usuario tiene control, el botón izquierdo del mouse, y mueve el mouse, y (2) tengo la posición del mouse nueva y antigua, ¿cómo uso la API de Win32 y mi HWND para cambiar la posición de la ventana?¿Cómo implemento arrastrando una ventana usando su área de cliente?

Respuesta

31

Implemente un controlador de mensajes para WM_NCHITTEST. Llame a DefWindowProc() y verifique si el valor devuelto es HTCLIENT. Devuelva HTCAPTION si lo está, de lo contrario, devuelva el valor de retorno de DefWindowProc. Ahora puede hacer clic en el área del cliente y arrastrar la ventana, del mismo modo que arrastraría una ventana haciendo clic en el título.

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

es la respuesta correcta –

+0

espera ... si esto es posible para ventanas hijas ... Estoy sorprendido ... – Dmitry

+0

No sólo eso, se puede, por ejemplo, devolver uno de los valores punta, como HTBOTTOMRIGHT y ahora obtiene un cursor de cambio de tamaño y puede hacerlo más grande o más pequeño arrastrando la esquina. El poder. –

Cuestiones relacionadas