按下Alt-Enter时调用什么函数?

时间:2011-12-17 00:22:05

标签: c++ windows directx-11

我有一个游戏应用程序,能够在按下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处理程序时,它被调用,但这不是我的意思。如果我从该消息处理程序中取出它,窗口STILL将进入全屏,即使我没有调用任何函数来使窗口全屏显示。所以Alt + Enter必须自动调用一些内部函数才能执行此操作。

这就是我的问题:当按下Alt-Enter时,有没有人知道Windows和/或DirectX 11调用了什么功能?

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

编辑2:我现在完全按下Alt + Enter按键并手动存储按下Alt + Enter的状态,以便我确定只知道我的代码被调用。然而,我上面提到的警告仍然存在。我也关注MSDN best practices,所以我不知道从哪里开始。

2 个答案:

答案 0 :(得分:0)

尝试处理WM_ACTIVATEAPP消息。

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

答案 1 :(得分:0)

在查看MSDN最佳做法页面并重新处理我的代码以反映所描述的所有做法后,警告已消失。我希望这可以帮助其他有同样问题的人。

另外,感谢Hans Passant的链接。我发布它的时候已经修好了,不过也谢谢了。