2011-10-14 29 views
11

我有一個Win32 HWND,我想讓用戶按住鼠標左鍵並拖動屏幕周圍的窗口。假設(1)我可以檢測到用戶何時握住控件,鼠標左鍵並移動鼠標,(2)我有新的和舊的鼠標位置,如何使用Win32 API和我的HWND來更改窗戶的位置?如何實現使用客戶區拖動窗口?

回答

31

爲WM_NCHITTEST實現消息處理程序。調用DefWindowProc()並檢查返回值是否爲HTCLIENT。如果是則返回HTCAPTION,否則返回DefWindowProc返回值。您現在可以單擊客戶端區域並拖動窗口,就像通過單擊標題拖動窗口一樣。

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

是正確答案 –

+0

等待......如果這是可能的子窗口...我很驚訝...... – Dmitry

+0

不僅如此,例如你可以返回像HTBOTTOMRIGHT邊緣值之一,現在你得到一個調整大小的光標,並且可以通過拖動角來使其變大或變小。動力。 –