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


Интерфейс ID2D1DCRenderTarget (d2d1.h)

Выдает команды рисования в контексте устройства GDI.

Наследование

Интерфейс ID2D1DCRenderTarget наследуется от ID2D1RenderTarget. ID2D1DCRenderTarget также имеет следующие типы элементов:

Методы

Интерфейс ID2D1DCRenderTarget содержит следующие методы.

 
ID2D1DCRenderTarget::BindDC

Привязывает целевой объект отрисовки к контексту устройства, в котором он выдает команды рисования.

Комментарии

Создание объектов ID2D1DCRenderTarget

Чтобы создать ID2D1DCRenderTarget, используйте метод ID2D1Factory::CreateDCRenderTarget .

Перед отрисовкой с целевым объектом отрисовки контроллера домена необходимо использовать его метод BindDC , чтобы связать его с контроллером домена GDI. Это можно сделать при каждом использовании другого контроллера домена или при изменении размера области, на которую вы хотите нарисовать.

Чтобы обеспечить работу целевого объекта отрисовки контроллера домена с GDI, задайте для нее формат пикселей DXGI_FORMAT_B8G8R8A8_UNORM , а в режиме альфа - D2D1_ALPHA_MODE_PREMULTIPLIED или D2D1_ALPHA_MODE_IGNORE.

Приложение должно создать целевые объекты отрисовки один раз и удерживать их на протяжении всего времени существования приложения или до тех пор, пока метод EndDraw целевого объекта отрисовки не вернет ошибку D2DERR_RECREATE_TARGET . При возникновении этой ошибки необходимо повторно создать целевой объект отрисовки (и все созданные им ресурсы).

ID2D1DCRenderTargets, преобразования GDI и языковые сборки Windows справа налево

При использовании ID2D1DCRenderTarget он отрисовывает содержимое Direct2D во внутреннее растровое изображение, а затем отображает его в контроллере домена с помощью GDI.

GDI может применить преобразование GDI (с помощью метода SetWorldTransform ) или другой эффект к тому же контроллеру домена, который используется целевым объектом отрисовки. В этом случае GDI преобразует растровое изображение, созданное Direct2D. Использование преобразования GDI для преобразования содержимого Direct2D может привести к снижению качества визуального отображения выходных данных, так как вы преобразуете растровое изображение, для которого уже рассчитаны сглаживание и положение подпиксели.

Например, предположим, что вы используете целевой объект отрисовки для рисования сцены, содержащей сглаживание геометрических объектов и текста. Если вы используете преобразование GDI для применения преобразования масштабирования к контроллеру домена и масштабирования сцены таким образом, чтобы она была в 10 раз больше, вы увидите пикселизацию и зубчатые края. (Однако если вы применили аналогичное преобразование с помощью Direct2D, качество визуализации сцены не будет снижено.)

В некоторых случаях может быть не очевидно, что GDI выполняет дополнительную обработку, которая может ухудшить качество содержимого Direct2D. Например, в сборке Windows справа налево (RTL) содержимое, отображаемое id2D1DCRenderTarget , может быть горизонтально инвертировано, когда GDI копирует его в место назначения. Фактически ли инвертировано содержимое, зависит от текущих параметров контроллера домена.

В зависимости от типа отображаемого содержимого может потребоваться предотвратить инверсию. Если содержимое Direct2D содержит текст ClearType, это приведет к снижению качества текста.

Поведением отрисовки RTL можно управлять с помощью функции SetLayout GDI. Чтобы предотвратить зеркальное отображение, вызовите функцию SetLayout GDI и укажите LAYOUT_BITMAPORIENTATIONPRESERVED в качестве единственного значения для второго параметра (не объединяйте его с LAYOUT_RTL), как показано в следующем примере:

SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);

Примеры

В следующем коде создается целевой объект отрисовки контроллера домена.

// Create a DC render target.
D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
    D2D1_RENDER_TARGET_TYPE_DEFAULT,
    D2D1::PixelFormat(
        DXGI_FORMAT_B8G8R8A8_UNORM,
        D2D1_ALPHA_MODE_IGNORE),
    0,
    0,
    D2D1_RENDER_TARGET_USAGE_NONE,
    D2D1_FEATURE_LEVEL_DEFAULT
    );

hr = m_pD2DFactory->CreateDCRenderTarget(&props, &m_pDCRT);

В приведенном выше коде m_pD2DFactory является указателем на ID2D1Factory, а m_pDCRT — указателем на ID2D1DCRenderTarget.

В следующем примере кода контроллер домена привязывается к ID2D1DCRenderTarget.

HRESULT DemoApp::OnRender(const PAINTSTRUCT &ps)
{

// Get the dimensions of the client drawing area.
GetClientRect(m_hwnd, &rc);

// Bind the DC to the DC render target.
hr = m_pDCRT->BindDC(ps.hdc, &rc);

Дополнительные сведения об использовании GDI с Direct2D см. в статье Общие сведения о взаимодействии Direct2D и GDI.

Требования

   
Минимальная версия клиента Windows 7, Windows Vista с пакетом обновления 2 (SP2) и обновлением платформы для Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 R2, Windows Server 2008 с пакетом обновления 2 (SP2) и Обновление платформы для Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header d2d1.h

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

Общие сведения о взаимодействии Direct2D и GDI

ID2D1RenderTarget