Interfaz ID2D1HwndRenderTarget (d2d1.h)

Representa las instrucciones de dibujo en una ventana.

Herencia

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

Métodos

La interfaz ID2D1HwndRenderTarget tiene estos métodos.

 
ID2D1HwndRenderTarget::CheckWindowState

Indica si el HWND asociado a este destino de representación está obstruido.
ID2D1HwndRenderTarget::GetHwnd

Devuelve el HWND asociado a este destino de representación.
ID2D1HwndRenderTarget::Resize

Cambia el tamaño del destino de representación al tamaño de píxel especificado. (sobrecarga 2/2)
ID2D1HwndRenderTarget::Resize

Cambia el tamaño del destino de representación al tamaño de píxel especificado. (sobrecarga 1/2)

Comentarios

Como sucede con otros destinos de representación, debe llamar a BeginDraw antes de emitir comandos de dibujo. Cuando haya terminado de dibujar, llame a EndDraw para indicar que el dibujo ha finalizado y para liberar el acceso al búfer que respalda el destino de representación.

Para ID2D1HwndRenderTarget, el único efecto secundario de BeginDraw cambia el estado del destino de representación para permitir que se emita comandos de dibujo.

EndDraw vacía los comandos de dibujo por lotes. Si no se han producido errores, también presenta el búfer, lo que hace que aparezca en la ventana asociada. Por último, EndDraw devuelve el VALOR HRESULT del primer error que se produjo en el dibujo o presentación, así como el estado de la etiqueta en el momento en que se produjo el error.

Los objetos ID2D1HwndRenderTarget se almacenan en búfer doble, por lo que los comandos de dibujo emitidos no aparecen inmediatamente, sino que se realizan en una superficie fuera de la pantalla. Cuando se llama a EndDraw , si no se han producido errores de representación, se presenta el búfer fuera de la pantalla. Si se han producido errores de representación en el lote vaciado por EndDraw, no se presenta el búfer y la aplicación debe llamar a BeginDraw y volver a dibujar el marco. El vaciado se puede usar para comprobar si hay errores antes de llamar a EndDraw si una aplicación quiere que se presente el marco independientemente de los errores.

El búfer de reserva de un destino de representación de hardware es el tamaño especificado por GetPixelSize. Si EndDraw presenta el búfer, este mapa de bits se extiende para cubrir la superficie donde se presenta: el área de cliente completa de la ventana. Esta extensión se realiza mediante el filtrado bilineal si el destino de representación se representa en hardware y usa el filtrado vecino más cercano si el destino de representación usa software. (Normalmente, una aplicación llamará a Resize para asegurarse de que el tamaño de píxel del destino de representación y el tamaño de píxel de la coincidencia de destino, y no es necesario escalar, aunque esto no es un requisito).

En el caso de que se copien adaptadores de ventanas de straddles, Direct2D garantiza que la parte del destino de representación fuera de pantalla se copie del adaptador donde se está produciendo la representación en el adaptador que necesita mostrar el contenido.

Si el adaptador en el que se encuentra un destino de representación se ha quitado o se ha actualizado el controlador mientras se ejecuta la aplicación, se devuelve como un error en la llamada a EndDraw . En este caso, la aplicación debe crear un nuevo destino de representación y recursos según sea necesario.

Creación de objetos ID2D1HwndRenderTarget

Para crear un ID2D1HwndRenderTarget, use el método ID2D1Factory::CreateHwndRenderTarget .

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ó).

Ejemplos

En el ejemplo siguiente se usa el método CreateHwndRenderTarget para crear un id2D1HwndRenderTarget.

RECT rc;
GetClientRect(m_hwnd, &rc);

D2D1_SIZE_U size = D2D1::SizeU(
    rc.right - rc.left,
    rc.bottom - rc.top
    );

// Create a Direct2D render target.
hr = m_pD2DFactory->CreateHwndRenderTarget(
    D2D1::RenderTargetProperties(),
    D2D1::HwndRenderTargetProperties(m_hwnd, size),
    &m_pRenderTarget
    );

En el ejemplo siguiente se usa ID2D1HwndRenderTarget para dibujar texto en la ventana.

//  Called whenever the application needs to display the client
//  window. This method writes "Hello, World"
//
//  Note that this function will automatically discard device-specific
//  resources if the Direct3D device disappears during function
//  invocation, and will recreate the resources the next time it's
//  invoked.
//
HRESULT DemoApp::OnRender()
{
    HRESULT hr;

    hr = CreateDeviceResources();

    if (SUCCEEDED(hr))
    {
        static const WCHAR sc_helloWorld[] = L"Hello, World!";

        // Retrieve the size of the render target.
        D2D1_SIZE_F renderTargetSize = m_pRenderTarget->GetSize();

        m_pRenderTarget->BeginDraw();

        m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());

        m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));

        m_pRenderTarget->DrawText(
            sc_helloWorld,
            ARRAYSIZE(sc_helloWorld) - 1,
            m_pTextFormat,
            D2D1::RectF(0, 0, renderTargetSize.width, renderTargetSize.height),
            m_pBlackBrush
            );

        hr = m_pRenderTarget->EndDraw();

        if (hr == D2DERR_RECREATE_TARGET)
        {
            hr = S_OK;
            DiscardDeviceResources();
        }
    }

    return hr;
}

El código se ha omitido en este ejemplo.

Requisitos

Requisito Value
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

ID2D1RenderTarget