【问题标题】:DirectX11 Monitor HandlesDirectX11 显示器手柄
【发布时间】:2014-09-22 15:48:01
【问题描述】:

我正在将一些遗留代码从 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】:

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

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

    【讨论】:

    • 我不敢相信我在提出这个问题之前遵循了所有这些步骤并错过了 Monitor 变量。真是个笨蛋。干杯,就像一个魅力:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多