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