2014-09-22 29 views
0

我目前移植了一些遺留代碼Dx9中到DX11。我是一個有DirectX的新手,所以請和我一起裸照。我已經設法移植了D3D設備和上下文的創建,但是還有一些需要維護的遺留代碼,我不知道如何將它移植到Dx11。DirectX11的監視器把手

有問題的代碼使用Win32函數爲了得到一個顯示器的手柄保持像這樣:

DEVMODE dm = { 0 }; 
dm.dmSize = sizeof(DEVMODE); 
EnumDisplaySettings("\\\\.\\DISPLAY3", ENUM_CURRENT_SETTINGS, &dm); 

POINT p = { dm.dmPosition.x, dm.dmPosition.y }; 
HMONITOR hMonitorGDI = MonitorFromPoint(p, MONITOR_DEFAULTTONEAREST); 

然後經由安裝在D3D9設備,像這樣適配器監控循環,並尋找匹配的句柄:

unsigned int uiAdapterCount = m_p_d3d9->GetAdapterCount(); 
for (unsigned int i = 0; i < uiAdapterCount; ++i) { 
    HMONITOR hMonitorD3D = m_p_d3d9->GetAdapterMonitor(i); 
    if (hMonitorD3D == hMonitorGDI) 
    { 
     p_is->uiAdapter = i; 
     break; 
    } 
} 

我不能爲我的愛制定出如何在Dx11中做同樣的事情。我已經學會了如何創建一個DXGIFactory,並通過它獲取適配器和輸出(監視器)信息,但我似乎無法找到與檢索Dx11中的監視器句柄有關的任何內容。

任何幫助或指針在正確的方向將不勝感激。歡呼聲

回答

2

您可以使用IDXGIFactory::EnumAdapters來枚舉每個適配器,並使用IDXGIAdapter::EnumOutputs來枚舉每個適配器的輸出。然後調用IDXGIOutput::GetDesc得到一個DXGI_OUTPUT_DESC結構包括HMONITOR句柄輸出。

通過查找具有相同桌面座標或可能設備名稱的輸出,您可能可以在GDI示例代碼中跳過一兩步。

+0

我不敢相信在問這個問題之前我沒有遵循所有這些步驟,並且錯過了Monitor變量。什麼是小飛機。爲此歡呼,就像一個魅力:) – TheRarebit 2014-09-23 07:18:24