Интерфейс 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 |