2012-03-07 17 views
1

私はゲームで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のリモートデバッガを使用して起動された場合です。

答えて

1

デバッガなどのアプリケーションがフォーカスを奪っているか、ウォッチドッグタイマーが表示されているようです。

は、MSDNでDXGIの概要で「フルスクリーンモードでのデバッグ」を参照してください。特に http://msdn.microsoft.com/en-us/library/windows/desktop/bb205075(v=vs.85).aspx#Debugging

をレジストリキーが設定したためにそこに必要がある場合がありますどの言及があります。

0

私にとっては、「拡大」ではなく「複製」に画面表示を変更すると、この問題が解決されました。私はフルスクリーンを持っていたので、根本的な原因は分かりません。...ええええええええと、...視覚化アプリケーションは、コンソールアプリケーションのVisual Studioで、この状況に。 ディスプレイを「拡張」から「複製」に変更してみてください。

関連する問題