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


Метод IDXGISurface1::GetDC (dxgi.h)

Возвращает контекст устройства (DC), который позволяет выполнять отрисовку в поверхности Microsoft DirectX Graphics Infrastructure (DXGI) с помощью интерфейса графических устройств Windows (GDI).

Синтаксис

HRESULT GetDC(
        BOOL Discard,
  [out] HDC  *phdc
);

Параметры

Discard

Тип: BOOL

Логическое значение, указывающее, следует ли сохранять содержимое Direct3D в контроллере домена GDI. Значение TRUE указывает среде выполнения не сохранять содержимое Direct3D в контроллере домена GDI; то есть среда выполнения удаляет содержимое Direct3D. Значение FALSE гарантирует, что содержимое Direct3D будет доступно в контроллере домена GDI.

[out] phdc

Тип: HDC*

Указатель на дескриптор HDC , представляющий текущий контекст устройства для отрисовки GDI.

Возвращаемое значение

Тип: HRESULT

Возвращает S_OK в случае успешного выполнения; в противном случае — код ошибки.

Комментарии

Этот метод не поддерживается DXGI 1.0, который поставляется в Windows Vista и Windows Server 2008. Требуется поддержка DXGI 1.1, которая доступна в Windows 7, Windows Server 2008 R2, а также в качестве обновления для Windows Vista с пакетом обновления 2 (SP2) (971644 базы знаний) и Windows Server 2008 (971512 базы знаний).

После использования метода GetDC для получения контроллера домена можно выполнить отрисовку в поверхности DXGI с помощью GDI.
Метод GetDC считывает поверхность для отрисовки GDI и обеспечивает взаимодействие между технологиями DXGI и GDI.

При использовании этого метода учитывайте следующее:

  • Поверхность необходимо создать с помощью флага D3D11_RESOURCE_MISC_GDI_COMPATIBLE для поверхности или флага DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE для цепочек буферов. В противном случае этот метод завершается ошибкой.
  • Перед выполнением новых команд Direct3D необходимо освободить устройство и вызвать метод IDXGISurface1::ReleaseDC .
  • Этот метод завершается сбоем, если этот метод уже создал необработанные контроллер домена.
  • Формат поверхности или цепочки буферов должен быть DXGI_FORMAT_B8G8R8A8_UNORM_SRGB или DXGI_FORMAT_B8G8R8A8_UNORM.
  • В GetDC целевой объект отрисовки в слиянии выходных данных конвейера Direct3D не связан с поверхностью. Необходимо вызвать метод ID3D11DeviceContext::OMSetRenderTargets на устройстве перед отрисовкой Direct3D после отрисовки GDI.
  • Перед изменением размера буферов необходимо освободить все необработанные контроллеры домена.
Вы также можете вызвать GetDC в обратном буфере с индексом 0 цепочки буферов, получив IDXGISurface1 из цепочки буферов. Этот процесс показан в следующем коде.

IDXGISwapChain* g_pSwapChain = NULL;
IDXGISurface1* g_pSurface1 = NULL;
...
//Setup the device and the swapchain
g_pSwapChain->GetBuffer(0, __uuidof(IDXGISurface1), (void**) &g_pSurface1);
g_pSurface1->GetDC( FALSE, &g_hDC );
...      
//Draw on the DC using GDI
...
//When finish drawing release the DC
g_pSurface1->ReleaseDC( NULL );
      

Требования

Требование Значение
Минимальная версия клиента Windows 7 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 R2 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header dxgi.h
Библиотека DXGI.lib

См. также раздел

Интерфейсы DXGI

IDXGISurface1