繁体   English   中英

DirectX11显示器手柄

[英]DirectX11 Monitor Handles

我正在将一些旧代码从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中检索监视器的句柄,我似乎找不到任何东西。

您可以使用IDXGIFactory::EnumAdapters枚举每个适配器,并使用IDXGIAdapter::EnumOutputs枚举每个适配器的输出。 然后调用IDXGIOutput::GetDesc以获取DXGI_OUTPUT_DESC结构,该结构包括用于输出的HMONITOR句柄。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM