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