Функция 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