2013-07-06 80 views
2

全部。


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

我最想做的是创建一个窗口,该窗口可以无边框或标题移动,我不需要自己跟踪鼠标,但是Windows为我做了这些操作,比如使整个窗口标题。

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

+0

为什么形式需要来响应你故意移动它快? –

+0

@AustinBrunkhorst因为这就是人们期望窗户行为的方式。如果您开始拖动窗口,则窗口应该结束拖动结束的位置,而不是鼠标光标发生超出窗口的某个位置。 – jamesdlin

+0

可能的重复[如何实现使用其客户区拖动窗口?](http://stackoverflow.com/questions/7773771/how-do-i-implement-dragging-a-window-using-its-client -area) –

回答

5

我知道我可以做这样的事情让鼠标点击的位置,然后计算了窗口竟又每次总会有这种WM_MOUSEMOVE。但是这个解决方案并不稳定,因为当我将鼠标移动得太快时,它就会离开窗口,然后它就不会反应。

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

我最想做的是创建一个窗口,该窗口可以无边框或标题移动,我不需要自己跟踪鼠标,但是Windows为我做的那样,就像使整个窗口成为标题。

如果您确实想这样做,您可以回复WM_NCHITTEST消息并返回HTCAPTION

+0

如果整个窗口应该可拖动,第二个选项是赢家。这是解决拖动无边框窗口问题的标准方法,您可以在整个网络上找到建议/解决方案。确保你也处理'WM_SETCURSOR'来为你的窗口的可拖动性提供正确的视觉暗示。 –

+0

谢谢你,第二个解决方案是完美的 - 正是我期待的。 – Lillesort131

+0

哦,我想给你+1,但我没有足够的声誉,因为这是我的第一个问题。:( – Lillesort131

-2

尝试WM_LBUTTONDOWN

PostMessage的(HWND,WM_SYSCOMMAND,SC_SIZE + 9,0)
+1

什么是SC_SIZE + 9应该是你的意思是'SC_MOVE'? – jamesdlin

+0

SC_SIZE + 9 = SC_DRAG,没有记录,只是尝试它:-) – kero

+0

-1用于推荐违反程序员合同的未记录功能,*特别是当有更好的,有文件记录的方法来解决问题 –