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 値 他の値を返す場合もあります。
備考
グラフィックス アダプターは、ビデオ カードに対応します。 モニター出力は、ビデオ カードのヘッドに対応します。 1 つのビデオ カードを持つシステムには、アダプターが 1 つだけ含まれています。 ただし、ビデオ カードが複数のヘッドをサポートしている場合は、複数のモニターへの出力をサポートします。 リソース リークを回避するには、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 |