我使用WS_EX_NOACTIVATE标志创建了一个窗口,当您单击该窗口时,它的工作效果很好。然而,当我拖动窗口或尝试调整它的大小时,它不会重新绘制窗口,因为你正在移动和调整它的大小,只有在最后,一旦你释放鼠标按钮。有办法解决这个问题吗?我想在调整窗口大小时看到它。
如果你需要一个在点击时不集中的窗口,但仍然可以与之交互,你需要处理WM_MOUSEACTIVATE,并返回MA_NOACTIVATE
。
附加信息和完整的工作示例代码已由Raymond Chen发布。请参阅我如何拥有一个拒绝激活但仍接收指针输入的窗口?
这是Windows的bug。您需要呼叫WM_MOVING
上的SetWindowPos(hwnd, 0, x, y, width, height, 0)
。要设置的坐标在lParam
中给出,这是RECT*
。
请注意,这样做将激活已拥有的窗口并停用所有者,这不是您想要的(并且SWP_NOACTIVATE
也没有效果)。
为了避免这种情况,您需要在自己的窗口上设置WS_CHILD。但是通过SetWindowLong()将设置在创建窗口之后,否则您自己的窗口将被剪切,就像任何子窗口一样。
并且,正如您可能已经发现的那样,这只适用于WS_EX_TOOLWINDOW
ex样式的windows。我无法使自己的窗口保持停用与任何其他风格的组合,不包括WS_EX_TOOLWINDOW
。
winapi: