如何实现使用客户区拖动窗口?

我有一个Win32的HWND,我想让用户控制和鼠标左键拖动窗口周围的屏幕。 (1)我可以检测到用户控制鼠标左键和移动鼠标,(2)我有新的和旧的鼠标位置,我如何使用Win32 API和我的HWND来改变窗户的位置?

Solutions Collecting From Web of "如何实现使用客户区拖动窗口?"

为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.. }