2014-09-22 143 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