私はゲームでDX11を使用しています。私は確実に全画面でゲームを開始できるようにしたいと考えています。つまり、スワップチェーンの説明にフルスクリーンを指定するか、ウィンドウを開始して直ちにフルスクリーンに切り替えるという2つのルートのいずれかに進むことができます。 MSDN(http://msdn.microsoft.com/en-us/library/windows/desktop/bb174537(v=vs.85).aspx)によれば、ウインドウモードでスワップチェーンを作成してから、フルスクリーンモードで起動したい場合はフルスクリーンに切り替える必要があります。これはまさに私がやっていることです。IDXGISwapChain :: SetFullscreenStateが全画面表示にならないのはなぜですか?
問題は次のとおりです。IDXGISwapChain::SetFullscreenState(TRUE, NULL)
を呼び出すと、呼び出しが失敗し、DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
エラーコードが返されます。 MSDNによれば、このような理由は次のとおりです。
- アプリケーションはターミナルサーバー上で実行されています。
- 出力ウィンドウが閉塞されています。
- 出力ウィンドウにキーボードフォーカスがありません。
- 別のアプリケーションは、すでにフルスクリーンモードです。
最初のケースは当てはまりません。私はリモートデバッガでVisual Studio 2010を使い果たしているので、リモートデバッガがターミナルサーバーを使用していない限り、それは問題ありません。後者の場合も真実ではありません。他のウィンドウはデスクトップに存在しません。 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のリモートデバッガを使用して起動された場合です。