C++ WINAPI/c++;:移动无边界窗口

C++ WINAPI/c++;:移动无边界窗口,c++,winapi,C++,Winapi,我使用以下样式创建了一个无边界窗口:WS_可见| WS_弹出| WS_重叠 问题是窗户无法移动。我知道我可以做一些事情,比如获取鼠标点击位置,然后计算每次出现WM\u MOUSEMOVE时窗口的最终位置 但这个解决方案并不稳定,因为当我把鼠标移动得太快时,它就会离开窗口,然后它就不会做出反应。我不想挂钩,因为它们太慢了。我在网上搜索过,但什么也没找到 理想情况下,我想创建一个窗口,它可以无边框或标题移动,我不需要自己跟踪鼠标,但Windows可以为我这样做,就像将整个窗口作为标题一样 我知道我可

我使用以下样式创建了一个无边界窗口:
WS_可见| WS_弹出| WS_重叠

问题是窗户无法移动。我知道我可以做一些事情,比如获取鼠标点击位置,然后计算每次出现
WM\u MOUSEMOVE
时窗口的最终位置

但这个解决方案并不稳定,因为当我把鼠标移动得太快时,它就会离开窗口,然后它就不会做出反应。我不想挂钩,因为它们太慢了。我在网上搜索过,但什么也没找到

理想情况下,我想创建一个窗口,它可以无边框或标题移动,我不需要自己跟踪鼠标,但Windows可以为我这样做,就像将整个窗口作为标题一样

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

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

理想情况下,我想创建一个窗口,它可以无边框或标题移动,我不需要自己跟踪鼠标,但Windows可以为我这样做,就像将整个窗口作为标题一样


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

try
PostMessage(hwnd,WM\u SYSCOMMAND,SC\u SIZE+9,0)
on
WM_LBUTTONDOWN

为什么表单需要对您有意快速移动表单做出响应?@AustinBrunkhorst,因为人们期望windows会这样做。如果你开始拖动窗口,窗口应该在拖动结束的地方结束,而不是在鼠标光标刚好超出窗口的某个点上。可能是@HansPassant的重复:可能,我没有看到。但无论如何,谢谢你的回答,贾梅斯德林。还有一个复制品,应该是
SC_SIZE+9
?你是说
SC\u MOVE
?SC\u SIZE+9=SC\u DRAG,undocumented,试一试:-)1推荐违反程序员合同的未文档化功能,特别是当有更好的、有文档记录的方法解决问题时,即使它是未文档化的,也可以+1用于一行程序解决方案,准确表达意图(解决方案
NCHITTEST
->
HTCAPTION
是个谎言,谁知道点击字幕以后会有什么效果?)。如果整个窗口应可拖动,则第二个选项是赢家。这是解决拖动无边框窗口问题的标准方法,您可以在web上找到建议/解决方案。请确保您还处理
WM_SETCURSOR
,以提供窗口可拖动性的正确视觉提示。谢谢,第二个解决方案是完美的-正是我想要的。哦,我想给你+1,但我没有足够的声誉,因为这是我的第一个问题:(@CodyGray,如果你不想拖拽整个窗口,那么
WM\u NCHITTEST
处理程序只需要对返回
HTCAPTION
@jamesdin-顺便说一句,我的老htspy以直观的方式详细介绍了主题: