使用WS_EX_NOACTIVATE标志创build一个窗口,但不能拖动,直到我释放鼠标

我已经使用WS_EX_NOACTIVATE标志创build了一个窗口,并且在单击窗口时不会占用焦点的情况下效果很好。 但是,当我拖动窗口或尝试调整它的大小时,它不会重新绘制窗口,因为您正在移动窗口并调整窗口的大小,只有在释放鼠标button的最后才会重新绘制窗口。 有没有解决的办法? 我希望看到窗口,因为我正在调整它。 我搜查了很多文件,但是我仍然没有find解决办法

这是一个Windows错误。 你需要在WM_MOVING上调用SetWindowPos(hwnd, 0, x, y, width, height, 0) 要设置的坐标在lParam中给出,这是一个RECT*

请注意,这样做将激活拥有的窗口并停用所有者,这不是您想要的( SWP_NOACTIVATE也不起作用)。

为了避免这种情况,您需要在拥有的窗口上设置WS_CHILD。 但是你通过SetWindowLong()创建窗口之后设置它,否则你拥有的窗口将被剪裁,就像任何子窗口一样。

而且,你可能已经想通了,这只适用于WS_EX_TOOLWINDOW ex样式的窗口。 我无法使拥有的窗口停用其他任何不包含WS_EX_TOOLWINDOW样式组合。

那是你的winapi 🙁

如果你需要一个单击时不需要关注的窗口,但仍然可以与之交互,则需要处理WM_MOUSEACTIVATE ,并返回MA_NOACTIVATE

Raymond Chen已经发布了更多的信息和完整的示例代码。 请参阅如何获得拒绝激活但仍接收指针输入的窗口?