【发布时间】:2015-12-18 22:20:45
【问题描述】:
我有两个 OpenGL 窗口:一个主窗口和一个设置为由主窗口“拥有”的较小窗口(在 CreateWindowEx 中设置了 hWndParent,但未设置 WS_CHILD 样式)。 如果我随后将我的主窗口转换为无边框并且与我的桌面大小相同,即使它是拥有的,它也会跳到较小的窗口前面,这应该是不可能的 (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632599%28v=vs.85%29.aspx#owned_windows)。即使较小的窗口设置为始终在顶部也是如此。
就其本身而言,这并不可怕,但核心问题是我仍然可以通过我的主窗口点击小窗口所在的位置,并且小窗口会弹出在前面。通过单击主窗口,然后单击主窗口,我可以像这样无休止地在两个窗口之间切换。
如果我将主窗口大小设置为比完整桌面大小小 1 个像素,则不会出现这些问题,并且窗口的行为与预期一致。
我找不到任何描述此行为的文档。它是一项功能,可防止窗口出现在未记录的内容(例如正在播放的视频)前面,或者我只是错过了它?
我会提到我在这里没有使用分层或透明窗口,所以我认为甚至不可能点击?
谢谢
【问题讨论】:
-
不确定 OpenGL 是否起作用,但一般来说,您可以通过将
MA_NOACTIVATE返回到WM_MOUSEACTIVATE消息来停止鼠标单击时出现在前面的窗口。 -
感谢您的回答。不幸的是,问题比这更大,因为较小的窗口正在处理所有鼠标事件,就好像它已经在主窗口的前面(鼠标悬停,点击等)。所以在这种状态下与主窗口的交互被破坏了。
-
您可以尝试的另一件事是处理
WM_NCHITTEST并返回HTTRANSPARENT。如果您的程序没有更多信息/代码,很难更具体。 -
如果您没有 OpenGL 上下文,这是否有效?尝试只创建一个带有按钮的常规旧窗口,使其全屏显示,然后在其上打开一个对话框。