Поделиться через


Функция 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 (include D3dkmthk.h)
библиотеки Gdi32.lib
DLL Gdi32.dll

См. также

D3DKMT_OPENADAPTERFROMHDC