ゲームで DX11 を使用していますが、確実にフルスクリーンでゲームを開始できるようにしたいと考えています。これは、スワップ チェーンの説明でフルスクリーンを指定するか、ウィンドウ表示を開始してすぐにフルスクリーンに切り替えるかの 2 つの方法のいずれかを実行できることを意味します。MSDN ( http://msdn.microsoft.com/en-us/library/windows/desktop/bb174537(v=vs.85).aspx ) によると、ウィンドウ モードでスワップ チェーンを作成してから、全画面表示に切り替える必要があります。フルスクリーンモードで開始したい場合は、まさに私がやっていることです。
問題は次のとおりです。 を呼び出すと、呼び出しが失敗し、エラー コードIDXGISwapChain::SetFullscreenState(TRUE, NULL)
が返されます。 DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
MSDN によると、これが発生する理由は次のとおりです。
- アプリケーションはターミナル サーバー上で実行されています。
- 出力ウィンドウが遮られています。
- 出力ウィンドウにキーボード フォーカスがありません。
- 別のアプリケーションが既にフルスクリーン モードになっています。
最初のケースは正しくありません。リモート デバッガーで Visual Studio 2010 を使い果たしたので、リモート デバッガーがターミナル サーバーを使用しない限り、それで問題ありません。2 番目のケースも当てはまりません。デスクトップには他のウィンドウはありません。4 番目のケースも当てはまりません。繰り返しますが、デスクトップには他のウィンドウはありません。
これにより、3 番目のオプションが残ります。キーボード フォーカス。オンラインで収集したものから、DX11 グラフィックス デバイスを作成する前にキーボード フォーカスを取得するために、このコードを作成しました。
HWND _returnValue = SetFocus(m_hWnd);
if(_returnValue == NULL) {
PrintWarning("Unable to get keyboard focus on app activation.\n");
}
この呼び出しは成功しますが、まだ全画面表示にはなりません。私もこれに代わるものを見つけることができませんでした。ただし、キーボード フォーカスを確実に盗むことができることはわかっています。Windows が常にそれを行っているのを見て、他のアプリがそれを行っているのを見てきました。
だから私の質問はこれです:どうすれば確実に全画面表示にできますか? または、アプリのキーボード フォーカスを確実に取得するにはどうすればよいですか?
編集:これを数回読んだ後、いくつかの重要な情報を見逃していることに気付きました. .exe をダブルクリックして直接使用するか、ターゲット マシンのスタートアップ メニューに配置すると、アプリケーションは常にフルスクリーンで正しく起動します (ただし、Windows ファイアウォール メッセージではフルスクリーンにできませんが、私はしません)。それが機能する必要があります)。唯一の問題は、アプリが別のアプリによって開始された場合、または Visual Studio リモート デバッガーを使用して開始された場合です。