Interfaz ID2D1DCRenderTarget (d2d1.h)

Emite comandos de dibujo en un contexto de dispositivo GDI.

Herencia

La interfaz ID2D1DCRenderTarget hereda de ID2D1RenderTarget. ID2D1DCRenderTarget también tiene estos tipos de miembros:

Métodos

La interfaz ID2D1DCRenderTarget tiene estos métodos.

 
ID2D1DCRenderTarget::BindDC

Enlaza el destino de representación al contexto del dispositivo al que emite comandos de dibujo.

Comentarios

Creación de objetos ID2D1DCRenderTarget

Para crear un ID2D1DCRenderTarget, use el método ID2D1Factory::CreateDCRenderTarget .

Para poder representar con el destino de representación del controlador de dominio, debe usar su método BindDC para asociarlo a un controlador de dominio GDI. Esto se hace cada vez que se usa un controlador de dominio diferente o el tamaño del área que desea dibujar para los cambios.

Para permitir que el destino de representación del controlador de dominio funcione con GDI, establezca su formato de píxel en DXGI_FORMAT_B8G8R8A8_UNORM y su modo alfa en D2D1_ALPHA_MODE_PREMULTIPLIED o D2D1_ALPHA_MODE_IGNORE.

La aplicación debe crear destinos de representación una vez y mantenerlos durante la vida útil de la aplicación o hasta que el método EndDraw del destino de representación devuelva el error D2DERR_RECREATE_TARGET . Cuando reciba este error, debe volver a crear el destino de representación (y los recursos que creó).

Id2D1DCRenderTargets, transformaciones de GDI y compilaciones de lenguaje de derecha a izquierda de Windows

Cuando usas un ID2D1DCRenderTarget, representa el contenido de Direct2D en un mapa de bits interno y, a continuación, representa el mapa de bits en el controlador de dominio con GDI.

Es posible que GDI aplique una transformación GDI (a través del método SetWorldTransform ) u otro efecto al mismo controlador de dominio usado por el destino de representación, en cuyo caso GDI transforma el mapa de bits generado por Direct2D. El uso de una transformación GDI para transformar el contenido de Direct2D tiene la posibilidad de degradar la calidad visual de la salida, ya que está transformando un mapa de bits para el que ya se han calculado el suavizado de contorno y el posicionamiento de subpíxeles.

Por ejemplo, supongamos que usa el destino de representación para dibujar una escena que contenga geometrías antialias y texto. Si usa una transformación GDI para aplicar una transformación de escala al controlador de dominio y escalar la escena para que sea 10 veces mayor, verá píxeles y bordes escalonados. (Sin embargo, si aplicaste una transformación similar mediante Direct2D, la calidad visual de la escena no se degradaría).

En algunos casos, es posible que no sea obvio que GDI está realizando un procesamiento adicional que podría degradar la calidad del contenido de Direct2D. Por ejemplo, en una compilación de derecha a izquierda (RTL) de Windows, el contenido representado por un ID2D1DCRenderTarget podría invertirse horizontalmente cuando GDI lo copia en su destino. Si el contenido se invierte realmente depende de la configuración actual del controlador de dominio.

En función del tipo de contenido que se represente, es posible que quiera evitar la inversión. Si el contenido de Direct2D incluye texto ClearType, esta inversión degradará la calidad del texto.

Puede controlar el comportamiento de representación de RTL mediante la función SetLayout GDI. Para evitar la creación de reflejo, llame a la función SetLayout GDI y especifique LAYOUT_BITMAPORIENTATIONPRESERVED como el único valor del segundo parámetro (no lo combine con LAYOUT_RTL), como se muestra en el ejemplo siguiente:

SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);

Ejemplos

El código siguiente crea un destino de representación de controlador de dominio.

// 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);

En el código anterior, m_pD2DFactory es un puntero a id2D1Factory y m_pDCRT es un puntero a un id2D1DCRenderTarget.

En el ejemplo de código siguiente se enlaza un controlador de dominio al objeto 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);

Para obtener más información sobre el uso de GDI con Direct2D, consulta Introducción a la interoperación de Direct2D y GDI.

Requisitos

   
Cliente mínimo compatible Windows 7, Windows Vista con SP2 y Platform Update para Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 R2, Windows Server 2008 con SP2 y Actualización de plataforma para Windows Server 2008 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado d2d1.h

Consulte también

Introducción a la interoperación de Direct2D y GDI

ID2D1RenderTarget