D3DKMTOpenAdapterFromHdc 函式 (d3dkmthk.h)
D3DKMTOpenAdapterFromHdc 函式會將裝置內容句柄 (HDC) 對應至圖形適配卡句柄,如果配接器包含多個監視器輸出,則對應至其中一個輸出。
語法
NTSTATUS D3DKMTOpenAdapterFromHdc(
D3DKMT_OPENADAPTERFROMHDC *unnamedParam1
);
參數
unnamedParam1
pData [in, out]
D3DKMT_OPENADAPTERFROMHDC 結構的指標,描述執行對應所需的參數。
傳回值
D3DKMTOpenAdapterFromHdc 會傳回下列其中一個值:
傳回碼 | Description |
---|---|
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 |
目標平台 | Universal |
標頭 | d3dkmthk.h (包含 D3dkmthk.h) |
程式庫 | Gdi32.lib |
Dll | Gdi32.dll |