2011-10-14 7 views
11

Possiedo un HWND Win32 e vorrei consentire all'utente di mantenere il controllo e il pulsante sinistro del mouse per trascinare la finestra sullo schermo. Dato (1) che posso rilevare quando l'utente ha il controllo, il tasto sinistro del mouse e muove il mouse, e (2) ho la nuova e la vecchia posizione del mouse, come posso usare l'API Win32 e il mio HWND per cambiare la posizione della finestra?Come implementare il trascinamento di una finestra utilizzando la sua area client?

risposta

31

Implementare un gestore di messaggi per WM_NCHITTEST. Chiama DefWindowProc() e controlla se il valore restituito è HTCLIENT. Restituire HTCAPTION se lo è, altrimenti restituire il valore di ritorno DefWindowProc. Ora puoi fare clic sull'area client e trascinare la finestra, proprio come se avessi trascinato una finestra facendo clic sulla didascalia.

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

è la risposta corretta –

+0

aspettare ... se questo è possibile per le finestre figlio ... Sono stupito ... – Dmitry

+0

Non solo, è possibile ad esempio restituire uno dei valori di punta come HTBOTTOMRIGHT e ora ottieni un cursore di ridimensionamento e puoi renderlo più grande o più piccolo trascinando l'angolo. Il potere. –

Problemi correlati