Compartilhar via


Interface ID2D1HwndRenderTarget (d2d1.h)

Renderiza instruções de desenho em uma janela.

Herança

A interface ID2D1HwndRenderTarget herda de ID2D1RenderTarget. ID2D1HwndRenderTarget também tem estes tipos de membros:

Métodos

A interface ID2D1HwndRenderTarget tem esses métodos.

 
ID2D1HwndRenderTarget::CheckWindowState

Indica se o HWND associado a esse destino de renderização está obstruído.
ID2D1HwndRenderTarget::GetHwnd

Retorna o HWND associado a esse destino de renderização.
ID2D1HwndRenderTarget::Resize

Altera o tamanho do destino de renderização para o tamanho do pixel especificado. (sobrecarga 2/2)
ID2D1HwndRenderTarget::Resize

Altera o tamanho do destino de renderização para o tamanho do pixel especificado. (sobrecarga 1/2)

Comentários

Como é o caso de outros destinos de renderização, você deve chamar BeginDraw antes de emitir comandos de desenho. Depois de terminar de desenhar, chame EndDraw para indicar que o desenho foi concluído e liberar o acesso ao buffer que está apoiando o destino de renderização.

Para ID2D1HwndRenderTarget, o único efeito colateral de BeginDraw é alterar o estado do destino de renderização para permitir que comandos de desenho sejam emitidos.

EndDraw libera todos os comandos de desenho em lote. Se nenhum erro tiver ocorrido, ele também apresentará o buffer, fazendo com que ele apareça na janela associada. Por fim, EndDraw retorna o HRESULT do primeiro erro que ocorreu no desenho ou na apresentação, bem como o estado da marca no momento em que o erro ocorreu.

Os objetos ID2D1HwndRenderTarget são armazenados em buffer duplo, portanto, os comandos de desenho emitidos não aparecem imediatamente, mas são executados em uma superfície fora da tela. Quando EndDraw é chamado, se não houver erros de renderização, o buffer offscreen será apresentado. Se houver erros de renderização no lote liberado pelo EndDraw, o buffer não será apresentado e o aplicativo deverá chamar BeginDraw e desenhar novamente o quadro. A liberação pode ser usada para marcar para erros antes de chamar EndDraw se um aplicativo quiser que o quadro seja apresentado independentemente de erros.

O buffer traseiro de um destino de renderização de hardware é o tamanho especificado por GetPixelSize. Se EndDraw apresentar o buffer, esse bitmap será estendido para cobrir a superfície em que ele é apresentado: toda a área do cliente da janela. Esse alongamento será executado usando a filtragem bilinear se o destino de renderização estiver sendo renderizado no hardware e usando a filtragem de vizinho mais próximo se o destino de renderização estiver usando software. (Normalmente, um aplicativo chamará Redimensionar para garantir o tamanho do pixel do destino de renderização e o tamanho do pixel da correspondência de destino, e nenhuma escala é necessária, embora isso não seja um requisito.)

No caso em que uma janela atravessa adaptadores, Direct2D garante que a parte do destino de renderização fora da tela seja copiada do adaptador em que a renderização está ocorrendo para o adaptador que precisa exibir o conteúdo.

Se o adaptador em que um destino de renderização está foi removido ou o driver atualizado enquanto o aplicativo está em execução, isso é retornado como um erro na chamada EndDraw . Nesse caso, o aplicativo deve criar um novo destino de renderização e recursos conforme necessário.

Criando objetos ID2D1HwndRenderTarget

Para criar um método ID2D1HwndRenderTarget, use o método ID2D1Factory::CreateHwndRenderTarget .

Seu aplicativo deve criar destinos de renderização uma vez e mantê-los durante a vida útil do aplicativo ou até que o método EndDraw do destino de renderização retorne o erro D2DERR_RECREATE_TARGET . Ao receber esse erro, você precisa recriar o destino de renderização (e todos os recursos que ele criou).

Exemplos

O exemplo a seguir usa o método CreateHwndRenderTarget para criar um 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
    );

O próximo exemplo usa o ID2D1HwndRenderTarget para desenhar o texto para a janela.

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

O código foi omitido neste exemplo.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7, Windows Vista com SP2 e Atualização de Plataforma para Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 R2, Windows Server 2008 com SP2 e Atualização de Plataforma para Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho d2d1.h

Confira também

ID2D1RenderTarget