WINAPI / c ++:移动无边框窗口

时间:2013-07-06 10:05:47

标签: c++ winapi

所有点。


这是我在stackoverflow上的第一个问题,所以我希望我做得对。无论如何,我的问题:
我使用这些样式创建了一个无边框窗口:WS_VISIBLE | WS_POPUP | WS_OVERLAPPED
问题是窗口无法移动。我知道我可以做一些事情,比如获取鼠标点击位置,然后计算每次出现WM_MOUSEMOVE时窗口最终的位置。但是这个解决方案并不稳定,因为当我移动鼠标太快时,它会离开窗口,然后它就不会做出反应。我不想设置一个钩子,因为它们太慢了。我在互联网上搜索过,但一切都没有出现。

我理想的是,创建一个窗口,可以移动没有边框或标题,我不需要自己跟踪鼠标,但Windows为我做的,就像整个窗口的标题一样点。

2 个答案:

答案 0 :(得分:4)

  

我知道我可以做一些事情,比如获取鼠标点击位置,然后计算每次出现WM_MOUSEMOVE时窗口最终的位置。但是这个解决方案并不稳定,因为当我将鼠标移动太快时,它会离开窗口,然后它就不会起作用。

您可以通过在收到鼠标单击时调用SetCapture来解决此问题。然后,即使鼠标光标离开窗口,您仍将继续接收WM_MOUSEMOVE。当用户完成拖动并释放鼠标光标后,您应该调用ReleaseCapture

  

我理想的是,创建一个窗口,可以无边框或字幕移动,我不需要自己跟踪鼠标,但是Windows为我做了,就像制作整个窗口一样窗口标题。

如果你真的想这样做,你可以回复WM_NCHITTEST消息并返回HTCAPTION

答案 1 :(得分:-2)

在WM_LBUTTONDOWN上尝试PostMessage(hwnd,WM_SYSCOMMAND,SC_SIZE + 9,0)