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 |