DirectX11监视器句柄

问题描述 投票:0回答:1

我正在将一些遗留代码从Dx9移植到Dx11。我已经成功地完成了D3D设备和上下文的创建,但是有一些需要维护的遗留代码,我无法解决如何将其移植到Dx11。

有问题的代码使用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中检索监视器的句柄。

c++ windows winapi directx-11 directx-9
1个回答
2
投票

您可以使用IDXGIFactory::EnumAdapters枚举每个适配器和IDXGIAdapter::EnumOutputs来枚举每个适配器的输出。然后调用IDXGIOutput::GetDesc得到一个DXGI_OUTPUT_DESC结构,其中包含一个HMONITOR句柄输出。

您可以通过查找具有相同桌面坐标或设备名称的输出,跳过GDI示例代码中的一两步。

© www.soinside.com 2019 - 2024. All rights reserved.