我在遊戲中使用DX11,我希望能夠以全屏可靠地啓動遊戲。這意味着我可以選擇以下兩種路由之一:在交換鏈描述中指定全屏,或者啓動窗口並立即切換到全屏。根據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,所以除非遠程調試器使用終端服務器,否則我沒有問題。第二種情況也是不正確的;桌面上沒有其他窗口。第四種情況也是不正確的;再次,桌面上不存在其他窗口。
這留下了第三個選項。鍵盤焦點。從我在線收集的內容中,我創建了此代碼以在創建DX11圖形設備之前獲得鍵盤焦點。
HWND _returnValue = SetFocus(m_hWnd);
if(_returnValue == NULL) {
PrintWarning("Unable to get keyboard focus on app activation.\n");
}
這個調用成功,但我仍然沒有全屏。我還沒能找到替代方案。但是,我知道可以可靠地竊取鍵盤焦點,因爲我一直都在看Windows,而且我已經看到其他應用程序執行此操作。
所以我的問題是:我怎樣才能可靠地去全屏?或者我如何可靠地獲得我的應用程序的鍵盤焦點?
編輯:在閱讀了幾次後,我意識到我錯過了一些關鍵信息。如果我通過雙擊該文件或直接在目標計算機上的啓動菜單中直接使用.exe,該應用程序始終以全屏方式正確啓動(儘管Windows防火牆消息仍使其無法全屏顯示,但我不需要這個工作)。唯一的問題是應用程序是由另一個應用程序啓動還是使用Visual Studio遠程調試器啓動。