OpenGL非独占全屏模式(又称无边框窗口全屏)

6

我试图实现全屏无边框窗口的支持,但是我找到的所有信息都没有帮助。

无论窗口是否设置为WS_EX_TOPMOST,窗口始终会处于独占全屏模式。我用WinSpy++检查了使用全屏无边框窗口模式的游戏中的窗口样式,而我使用的样式是完全相同的。

我知道它处于独占全屏模式,因为WDM停止渲染我的窗口的小aero预览。我也在窗口聚焦和失焦时看到了桌面闪烁。

我唯一能够做到与我想要的类似的行为方式的方法是欺骗Windows使其认为我不想要全屏模式。我这样做的方法是通过将窗口位置调整1个像素,使其不匹配屏幕的位置和大小。这可以防止Windows自动开启独占全屏模式。

我知道在DirectX中解决此问题的方法很简单,只需要将窗口标记设置为true。但是,在OpenGL中,我从未见过类似的东西。

根据第一条评论进行编辑:

我没有使用任何第三方库来进行窗口管理,只是用Win32和OpenGL。

编辑:

我使用的窗口样式是WS_POPUP。在我做一些DirectX测试时,我可以通过更改“窗口化”属性来正确创建全屏无边框窗口或全屏独占窗口,而使用相同的窗口样式。

我使用的硬件是GTX690,安装了最新的Win7 x64驱动程序。


1
OpenGL 中没有窗口管理的概念。显然,您正在使用 OpenGL 上的工具包。是 SDL 吗?NeHe?Vermillion?我问这个问题是因为它可能有助于找到解决方案。 - Jean-Simon Brochu
你使用了哪些窗口样式标志?WS_POPUPWINDOW | WS_VISIBLE 看起来可以给你想要的。也许你可以发布一下你的窗口创建代码。此外,你使用的是什么硬件(可能与驱动程序有关)。 - GuyRT
1
WS_POPUPWINDOW 实际上会在窗口周围留下一个 1 像素的白边。我想让它看起来与独占全屏相同。 - Frongo
尝试使用WS_POPUP而不是WS_POPUPWINDOW - GuyRT
根据https://stackoverflow.com/q/23145217/891846,如果您在任何方向上增加窗口大小1个像素,它会按预期工作。我尝试了一下,确实有效。 - Oliver
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接