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) |
Library | Gdi32.lib |
DLL | Gdi32.dll |