Interface ID2D1DCRenderTarget (d2d1.h)
Emite comandos de desenho para um contexto de dispositivo GDI.
Herança
A interface ID2D1DCRenderTarget herda de ID2D1RenderTarget. ID2D1DCRenderTarget também tem estes tipos de membros:
Métodos
A interface ID2D1DCRenderTarget tem esses métodos.
ID2D1DCRenderTarget::BindDC Associa o destino de renderização ao contexto do dispositivo ao qual ele emite comandos de desenho. |
Comentários
Criando objetos ID2D1DCRenderTarget
Para criar um ID2D1DCRenderTarget, use o método ID2D1Factory::CreateDCRenderTarget .Antes de renderizar com o destino de renderização dc, você deve usar seu método BindDC para associá-lo a um DC GDI. Você faz isso sempre que usa um DC diferente ou o tamanho da área que deseja desenhar para as alterações.
Para permitir que o destino de renderização de DC funcione com GDI, defina seu formato de pixel como DXGI_FORMAT_B8G8R8A8_UNORM e seu modo alfa como D2D1_ALPHA_MODE_PREMULTIPLIED ou D2D1_ALPHA_MODE_IGNORE.
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).
ID2D1DCRenderTargets, Transformações de GDI e builds de linguagem da direita para a esquerda do Windows
Quando você usa um ID2D1DCRenderTarget, ele renderiza o conteúdo direct2D em um bitmap interno e renderiza o bitmap para o DC com GDI.É possível que a GDI aplique uma transformação GDI (por meio do método SetWorldTransform ) ou outro efeito ao mesmo DC usado pelo destino de renderização, nesse caso, a GDI transforma o bitmap produzido pelo Direct2D. O uso de uma transformação GDI para transformar o conteúdo do Direct2D tem o potencial de degradar a qualidade visual da saída, pois você está transformando um bitmap para o qual o posicionamento de antialiasing e subpixel já foi calculado.
Por exemplo, suponha que você use o destino de renderização para desenhar uma cena que contenha geometrias e textos suavizados. Se você usar uma transformação GDI para aplicar uma transformação de escala ao DC e dimensionar a cena para que ela seja 10 vezes maior, você verá pixelização e bordas irregulares. (No entanto, se você aplicasse uma transformação semelhante usando o Direct2D, a qualidade visual da cena não seria degradada.)
Em alguns casos, pode não ser óbvio que o GDI está executando processamento adicional que pode degradar a qualidade do conteúdo Direct2D. Por exemplo, em um build da direita para a esquerda (RTL) do Windows, o conteúdo renderizado por um ID2D1DCRenderTarget pode ser invertido horizontalmente quando a GDI o copia para seu destino. Se o conteúdo é realmente invertido depende das configurações atuais do DC.
Dependendo do tipo de conteúdo que está sendo renderizado, talvez você queira impedir a inversão. Se o conteúdo direct2D incluir texto ClearType, essa inversão prejudicará a qualidade do texto.
Você pode controlar o comportamento de renderização rtl usando a função SetLayout GDI. Para evitar o espelhamento, chame a função SetLayout GDI e especifique LAYOUT_BITMAPORIENTATIONPRESERVED como o único valor para o segundo parâmetro (não combine-o com LAYOUT_RTL), conforme mostrado no exemplo a seguir:
SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);
Exemplos
O código a seguir cria um destino de renderização dc.
// 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);
No código anterior, m_pD2DFactory é um ponteiro para um ID2D1Factory e m_pDCRT é um ponteiro para um ID2D1DCRenderTarget.
O próximo exemplo de código associa um DC ao 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 obter mais informações sobre como usar o GDI com Direct2D, consulte a Visão geral da interoperação direct2D e GDI.
Requisitos
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 |