使用WS_EX_NOACTIVATE标志创建一个窗口,但是在我释放鼠标之前无法拖动它

时间:2014-07-31 05:40:48

标签: c++ windows drag

我使用WS_EX_NOACTIVATE标志创建了一个窗口,只要您在单击窗口时没有获得焦点,它就会很好用。但是,当我拖动窗口或尝试调整窗口大小时,它不会在您移动窗口时重新绘制窗口,只有在释放鼠标按钮时才会重新调整窗口大小。有没有解决的办法?当我调整它时,我想看到窗口。我搜索了很多文件,但我还是找不到决议......

2 个答案:

答案 0 :(得分:1)

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

请注意,执行此操作会激活拥有的窗口并停用所有者,这不是您想要的(并且SWP_NOACTIVATE也没有效果。)

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

而且,正如您可能已经想到的那样,这仅适用于具有WS_EX_TOOLWINDOW ex风格的窗口。我无法使用不包含WS_EX_TOOLWINDOW的任何其他样式组合停用所拥有的窗口。

那是你的winapi :(

答案 1 :(得分:1)

如果您需要一个在点击时无法获得焦点但仍可以与之互动的窗口,则需要处理WM_MOUSEACTIVATE,然后返回MA_NOACTIVATE

Raymond Chen已发布其他信息和完整的示例代码。见How can I have a window that rejects activation but still receives pointer input?