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.

2 番目の 2 つの可能性については、テストによって既に除外しているため、警告が表示される唯一の理由は、IDXGISwapChain::ResizeBuffers が正しく使用されていないか、Windows にバグがあるかのいずれかであることがわかっています。2番目の可能性をデバッグできないため、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

MSDNのベストプラクティスページを確認し、説明されているすべてのプラクティスを反映するようにコードを作り直した後、警告は消えました。これが同じ問題を抱えている他の人に役立つことを願っています。

また、リンクを提供してくれたHansPassantに感謝します。投稿するまでに修正済みですが、とにかくありがとうございます。

于 2012-01-18T23:35:07.823 に答える
0

WM_ACTIVATEAPPメッセージを処理してみてください。

ウィンドウの作成にどのフレームワークを使用しているかはわかりません。そのため、このメッセージを具体的に処理する方法がわかりません。

于 2011-12-17T00:36:30.507 に答える