我正在尝试获得对全屏无边框窗口的支持,但我发现的信息都没有帮助。
无论窗口是否设置为
WS_EX_TOPMOST
,窗口将始终处于独占全屏模式。我已经使用 WinSpy++ 使用全屏无边框窗口模式检查了游戏中的窗口样式,并且我使用的样式是相同的。
我知道它处于独占全屏模式,因为 WDM 停止为我的窗口渲染小 Aero 预览。我还因为聚焦和取消聚焦窗口而导致桌面闪烁。
我能够获得与我想要的行为类似的行为的唯一方法是欺骗窗口认为我不想要全屏模式。我的方法是将窗口位置调整 1px,使其与屏幕的位置和大小不匹配。这会阻止 Windows 自动打开独占全屏模式。
我知道在 DirectX 中,解决这个问题的方法很简单,就是创建窗口标志设置为 true 的设备。然而,我在 OpenGL 中从未见过这样的东西。
根据第一条评论进行编辑:
我的窗口没有使用任何第三方库,仅使用 Win32 和 OpenGL。
编辑:
我使用
WS_POPUP
作为窗口样式。在我所做的一些 DirectX 测试中使用相同的窗口样式,我可以通过更改“windowed”属性来正确创建全屏无边框窗口或全屏独占窗口。
对于硬件,我使用的是 GTX690,并在 Win7 x64 上安装了最新驱动程序。
在 ChoosePixelFormat/SetPixelFormat 的 PIXELFORMATDESCRIPTOR 中使用 PFD_SUPPORT_COMPOSITION。