2011-12-17 91 views
1

我有一個遊戲應用程序,當按下Alt-Enter鍵時,它可以全屏顯示並返回窗口。然而,當它進入全屏,我是從的DirectX收到以下警告:按下Alt-Enter鍵時會調用什麼函數?

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.

我已經排除了通過測試的第二兩種可能,所以我知道離開的警告,彈出的唯一原因是IDXGISwapChain :: ResizeBuffers沒有被正確使用,或者Windows只是被竊聽。由於我無法調試第二種可能性,因此我堅持使用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 best practices,所以我不知道該從哪裏出發。

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ee417025%28v=vs.85%29.aspx#Full_Screen_Issues – 2012-01-10 21:14:02

回答

0

在查看MSDN最佳實踐頁面並重新編寫代碼以反映所有描述的實踐後,警告消失了。我希望這可以幫助其他有同樣問題的人。

此外,感謝Hans Passant的鏈接。我已經在你發佈它的時候修復了它,但是謝謝。

0

嘗試處理WM_ACTIVATEAPP消息。

我不知道你用什麼框架來創建你的窗口,所以我不知道如何具體處理這個消息。

+0

對不起,這不是我正在尋找的。我已經處理了這個消息。肯定有一個嵌入式調用,可以調整我的窗口大小,而無需手動進行調整。 – Darkhydro 2011-12-17 01:18:19

相關問題