1

我有一个游戏应用程序,当按下 Alt-Enter 时,它能够全屏显示并返回窗口。但是,当它全屏显示时,我从 DirectX 收到以下警告:

DXGI Warning: IDXGISwapChain::Present: Fullscreen presentation inefficiencies incurred due to application not using IDXGISwapChain::ResizeBuffers appropriately, specifying a DXGI_MODE_DESC not available in IDXGIOutput::GetDisplayModeList, or not using DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH.

我已经通过测试排除了后两种可能性,所以我知道弹出警告的唯一原因是 IDXGISwapChain::ResizeBuffers 没有被正确使用,或者 Windows 只是被窃听。由于我无法调试第二种可能性,我坚持 ResizeBuffers 问题。为了调试这个,我想看看当按下 Alt-Enter 从窗口到全屏时会发生什么。但是,该应用程序似乎没有调用我的 ResizeDXGIBuffers 方法;事实上,Alt-Enter 似乎嵌入到某个地方的 windows 或 DirectX 中,我不知道如何找到按下它时发生的函数调用链。编辑:当我的方法被放入 WM_ACTIVATEAPP 处理程序时,它被调用,但这不是我的意思。如果我把它从那个消息处理程序中取出,窗口仍然会全屏显示,即使我自己没有调用任何函数来使窗口全屏显示。所以 Alt+Enter 必须自动调用一些内部函数来执行此操作。

所以这是我的问题:有谁知道按下 Alt-Enter 时 Windows 和/或 DirectX 11 调用了什么函数?

编辑:正如这个问题的标签所说,我在 Windows 机器上使用 DirectX 11。具体来说,Windows 7 64 位。

编辑 2:我现在完全吃掉了 Alt+Enter 击键并手动存储了 Alt+Enter 被按下的状态,这样我就可以确定只有我的代码被调用了。然而,我上面提到的警告仍然存在。我也在遵循MSDN 最佳实践,所以我不知道从哪里开始。

4

2 回答 2

0

尝试处理WM_ACTIVATEAPP消息。

我不知道你使用哪个框架来创建你的窗口,所以我不知道如何具体处理这个消息。

于 2011-12-17T00:36:30.507 回答
0

在查看 MSDN 最佳实践页面并重新编写我的代码以反映所描述的所有实践之后,警告消失了。我希望这可以帮助其他有同样问题的人。

另外,感谢 Hans Passant 的链接。你发帖的时候我已经修好了,不过还是谢谢你。

于 2012-01-18T23:35:07.823 回答