D3DKMTOpenAdapterFromHdc 函数 (d3dkmthk.h)

D3DKMTOpenAdapterFromHdc 函数将设备上下文句柄(HDC)映射到图形适配器句柄,如果适配器包含多个监视器输出,则映射到其中一个输出。

语法

NTSTATUS D3DKMTOpenAdapterFromHdc(
  D3DKMT_OPENADAPTERFROMHDC *unnamedParam1
);

参数

unnamedParam1

pData [in, out]

指向 D3DKMT_OPENADAPTERFROMHDC 结构的指针,该结构描述执行映射所需的参数。

返回值

D3DKMTOpenAdapterFromHdc 返回以下值之一:

返回代码 描述
STATUS_SUCCESS 映射已成功执行。
STATUS_NO_MEMORY 内核耗尽了资源,使它能够打开另一个句柄。
STATUS_INVALID_PARAMETER 已验证并确定参数不正确,或者未使用 Windows Vista 显示驱动程序模型。

此函数还可以返回其他 NTSTATUS 值。

言论

图形适配器对应于视频卡。 监视器输出对应于视频卡上的头。 具有单个视频卡的系统仅包含一个适配器。 但是,如果视频卡支持多个头,则它支持向多个监视器输出。 使用 D3DKMTCloseAdapter 函数以避免资源泄漏。

例子

下面的代码示例演示 OpenGL ICD 如何使用 D3DKMTOpenAdapterFromHdc 从 HDC 检索图形适配器句柄和主监视器的输出。

HRESULT GetPrimaryAdapterHandle(HANDLE* phAdapter, UINT* pOutput)
{
    D3DKMT_OPENADAPTERFROMHDC OpenAdapterData;
    DISPLAY_DEVICE dd;
    HDC hdc;
    int i;

    *phAdapter = NULL;
    *pOutput = 0;
    memset(&dd, 0, sizeof (dd));
    dd.cb = sizeof dd;

    for (i = 0; EnumDisplayDevicesA(NULL, i, &dd, 0); ++i) {
        if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) {
            break;
        }
    }

    hdc = CreateDC (NULL, dd.DeviceName, NULL, NULL);
    if (hdc == NULL) {
        return E_FAIL;
    }

    OpenAdapterData.hDc = hdc;
    if (NT_SUCCESS((*pfnKTOpenAdapterFromHdc)(&OpenAdapterData))) {
        DeleteDC(hdc);
        *phAdapter = OpenAdapterData.hAdapter;
        *pOutput = OpenAdapterData.VidPnSourceId;
        return S_OK;
    }
    DeleteDC(hdc);

    return E_FAIL;
}

要求

要求 价值
最低支持的客户端 Windows Vista
目标平台 普遍
标头 d3dkmthk.h (包括 D3dkmthk.h)
Gdi32.lib
DLL Gdi32.dll

另请参阅

D3DKMT_OPENADAPTERFROMHDC