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

标签 c++ windows directx-11

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

DXGI 警告:IDXGISwapChain::Present:由于应用程序未正确使用 IDXGISwapChain::ResizeBuffers、指定的 DXGI_MODE_DESC 在 IDXGIOutput::GetDisplayModeList 中不可用,或未使用 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 best practices也,所以我不知道从这里去哪里。

最佳答案

尝试处理 WM_ACTIVATEAPP消息。

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

关于c++ - 按下 Alt-Enter 时调用什么函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8541694/

相关文章:

c - 如何检查与网络驱动器的连接?

c++ - StepTimer.GetTotalSeconds() 产生的值并不总是增加

c++ - DirectX 11 顶点着色器反射

c++ - 使用调试文件构建 C++ 项目

c++ - 如何根据第一个或第二个中的较大值对数组对进行排序

c++ - 如何在构造函数中正确初始化 XMVECTOR?

windows - 通过在 Windows Batch 中检查日期和时间的名称来选择目录

windows-7 - 具有平台更新的 Windows 7 是否支持桌面复制?

c++ - 如何检查文件是否存在(无论其文件类型如何)?

c++ - 如何从 C++ 中的一组对象指针打印?