Share via


Interfaccia ID2D1DCRenderTarget (d2d1.h)

Esegue il disegno dei comandi in un contesto di dispositivo GDI.

Ereditarietà

L'interfaccia ID2D1DCRenderTarget eredita da ID2D1RenderTarget. ID2D1DCRenderTarget include anche questi tipi di membri:

Metodi

L'interfaccia ID2D1DCRenderTarget include questi metodi.

 
ID2D1DCRenderTarget::BindDC

Associa la destinazione di rendering al contesto di dispositivo a cui esegue i comandi di disegno.

Commenti

Creazione di oggetti ID2D1DCRenderTarget

Per creare un ID2D1DCRenderTarget, usare il metodo ID2D1Factory::CreateDCRenderTarget .

Prima di poter eseguire il rendering con la destinazione di rendering del controller di dominio, è necessario usare il metodo BindDC per associarlo a un controller di dominio GDI. Questa operazione viene eseguita ogni volta che si usa un controller di dominio diverso o le dimensioni dell'area da disegnare alle modifiche.

Per abilitare il funzionamento della destinazione di rendering del controller di dominio con GDI, impostarne il formato pixel su DXGI_FORMAT_B8G8R8A8_UNORM e la relativa modalità alfa su D2D1_ALPHA_MODE_PREMULTIPLIED o D2D1_ALPHA_MODE_IGNORE.

L'applicazione deve creare destinazioni di rendering una sola volta e mantenerle per la durata dell'applicazione o fino a quando il metodo EndDraw della destinazione di rendering non restituisce l'errore D2DERR_RECREATE_TARGET . Quando viene visualizzato questo errore, è necessario ricreare la destinazione di rendering e tutte le risorse create.

ID2D1DCRenderTargets, trasformazioni GDI e build del linguaggio da destra a sinistra di Windows

Quando si usa un ID2D1DCRenderTarget, esegue il rendering del contenuto Direct2D in una bitmap interna e quindi esegue il rendering della bitmap nel controller di dominio con GDI.

È possibile che GDI applichi una trasformazione GDI (tramite il metodo SetWorldTransform ) o un altro effetto allo stesso controller di dominio usato dalla destinazione di rendering, nel qual caso GDI trasforma la bitmap prodotta da Direct2D. L'uso di una trasformazione GDI per trasformare il contenuto Direct2D può compromettere la qualità visiva dell'output, perché si sta trasformando una bitmap per cui sono già stati calcolati il posizionamento di antialiasing e subpixel.

Si supponga, ad esempio, di usare la destinazione di rendering per disegnare una scena contenente geometrie e testo antialiased. Se si usa una trasformazione GDI per applicare una trasformazione di scala al controller di dominio e ridimensionare la scena in modo che sia maggiore di 10 volte, verranno visualizzati i bordi in pixel e i bordi irregolari. Se tuttavia è stata applicata una trasformazione simile usando Direct2D, la qualità visiva della scena non verrà danneggiata.

In alcuni casi, potrebbe non essere ovvio che GDI esegue un'elaborazione aggiuntiva che potrebbe compromettere la qualità del contenuto Direct2D. Ad esempio, in una build da destra a sinistra (RTL) di Windows, il contenuto di cui viene eseguito il rendering da un ID2D1DCRenderTarget potrebbe essere invertito orizzontalmente quando GDI lo copia nella destinazione. Se il contenuto è effettivamente invertito dipende dalle impostazioni correnti del controller di dominio.

A seconda del tipo di contenuto di cui viene eseguito il rendering, è possibile impedire l'inversione. Se il contenuto Direct2D include testo ClearType, questa inversione degraderà la qualità del testo.

È possibile controllare il comportamento di rendering RTL usando la funzione GDI SetLayout . Per evitare il mirroring, chiamare la funzione SetLayout GDI e specificare LAYOUT_BITMAPORIENTATIONPRESERVED come unico valore per il secondo parametro (non combinarlo con LAYOUT_RTL), come illustrato nell'esempio seguente:

SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);

Esempio

Il codice seguente crea una destinazione di rendering del controller di 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);

Nel codice precedente , m_pD2DFactory è un puntatore a un ID2D1Factory e m_pDCRT è un puntatore a un ID2D1DCRenderTarget.

L'esempio di codice successivo associa un controller di dominio a 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);

Per altre informazioni sull'uso di GDI con Direct2D, vedere Panoramica dell'interoperabilità Direct2D e GDI.

Requisiti

   
Client minimo supportato Windows 7, Windows Vista con SP2 e Aggiornamento della piattaforma per Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 R2, Windows Server 2008 con SP2 e Platform Update per Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione d2d1.h

Vedi anche

Panoramica dell'interoperabilità Direct2D e GDI

ID2D1RenderTarget