ID2D1DCRenderTarget-Schnittstelle (d2d1.h)

Gibt Zeichnungsbefehle für einen GDI-Gerätekontext aus.

Vererbung

Die ID2D1DCRenderTarget-Schnittstelle erbt von ID2D1RenderTarget. ID2D1DCRenderTarget verfügt auch über folgende Membertypen:

Methoden

Die ID2D1DCRenderTarget-Schnittstelle verfügt über diese Methoden.

 
ID2D1DCRenderTarget::BindDC

Bindet das Renderziel an den Gerätekontext, an den Zeichnungsbefehle ausgibt.

Hinweise

Erstellen von ID2D1DCRenderTarget-Objekten

Verwenden Sie zum Erstellen eines ID2D1DCRenderTarget-Objekts die ID2D1Factory::CreateDCRenderTarget-Methode .

Bevor Sie mit dem DC-Renderziel rendern können, müssen Sie dessen BindDC-Methode verwenden, um es einem GDI-DC zuzuordnen. Dies geschieht jedes Mal, wenn Sie einen anderen DC verwenden oder die Größe des Bereichs, den Sie auf Änderungen zeichnen möchten, verwenden.

Damit das DC-Renderziel mit GDI arbeiten kann, legen Sie das Pixelformat auf DXGI_FORMAT_B8G8R8A8_UNORM und den Alphamodus auf D2D1_ALPHA_MODE_PREMULTIPLIED oder D2D1_ALPHA_MODE_IGNORE fest.

Ihre Anwendung sollte Renderziele einmal erstellen und diese für die Lebensdauer der Anwendung oder bis die EndDraw-Methode des Renderziels den D2DERR_RECREATE_TARGET Fehler zurückgibt. Wenn sie diesen Fehler erhalten, müssen Sie das Renderziel (und alle erstellten Ressourcen) neu erstellen.

ID2D1DCRenderTargets, GDI-Transformationen und Rechts-nach-Links-Sprachbuilds von Windows

Wenn Sie ein ID2D1DCRenderTarget verwenden, wird Direct2D-Inhalt in einer internen Bitmap gerendert und anschließend mit GDI auf dem DC gerendert.

GDI kann eine GDI-Transformation (über die SetWorldTransform-Methode ) oder einen anderen Effekt auf denselben DC anwenden, der vom Renderziel verwendet wird. In diesem Fall transformiert GDI die von Direct2D erzeugte Bitmap. Die Verwendung einer GDI-Transformation zum Transformieren des Direct2D-Inhalts kann die visuelle Qualität der Ausgabe beeinträchtigen, da Sie eine Bitmap transformieren, für die bereits Antialiasing und Subpixelpositionierung berechnet wurden.

Angenommen, Sie verwenden das Renderziel, um eine Szene zu zeichnen, die antialiasierte Geometrien und Text enthält. Wenn Sie eine GDI-Transformation verwenden, um eine Skalierungstransformation auf den DC anzuwenden und die Szene so zu skalieren, dass sie 10-mal größer ist, sehen Sie Pixelisierung und gezackte Kanten. (Wenn Sie jedoch eine ähnliche Transformation mithilfe von Direct2D anwenden, würde die visuelle Qualität der Szene nicht beeinträchtigt.)

In einigen Fällen ist es möglicherweise nicht offensichtlich, dass GDI zusätzliche Verarbeitungen durchführt, die die Qualität des Direct2D-Inhalts beeinträchtigen könnten. In einem Rechts-nach-Links-Build (RTL) von Windows können von einem ID2D1DCRenderTarget gerenderte Inhalte beispielsweise horizontal invertiert werden, wenn GDI sie an sein Ziel kopiert. Ob der Inhalt tatsächlich invertiert wird, hängt von den aktuellen Einstellungen des Domänencontrollers ab.

Je nach Art des gerenderten Inhalts können Sie die Inversion verhindern. Wenn der Direct2D-Inhalt ClearType-Text enthält, beeinträchtigt diese Inversion die Qualität des Texts.

Sie können das RTL-Renderingverhalten mithilfe der GDI-Funktion SetLayout steuern. Um die Spiegelung zu verhindern, rufen Sie die SetLayout GDI-Funktion auf, und geben Sie LAYOUT_BITMAPORIENTATIONPRESERVED als einzigen Wert für den zweiten Parameter an (kombinieren Sie ihn nicht mit LAYOUT_RTL), wie im folgenden Beispiel gezeigt:

SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);

Beispiele

Mit dem folgenden Code wird ein DC-Renderziel erstellt.

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

Im vorherigen Code ist m_pD2DFactory ein Zeiger auf eine ID2D1Factory, und m_pDCRT ist ein Zeiger auf ein ID2D1DCRenderTarget.

Im nächsten Codebeispiel wird ein DC an id2D1DCRenderTarget gebunden.

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);

Weitere Informationen zur Verwendung von GDI mit Direct2D finden Sie in der Übersicht über die Direct2D- und GDI-Interoperation.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 7, Windows Vista mit SP2 und Plattformupdate für Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2, Windows Server 2008 mit SP2 und Plattformupdate für Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile d2d1.h

Weitere Informationen

Übersicht über die Direct2D- und GDI-Interoperation

ID2D1RenderTarget