Share via


Interface ID2D1DCRenderTarget (d2d1.h)

Émet le dessin de commandes dans un contexte d’appareil GDI.

Héritage

L’interface ID2D1DCRenderTarget hérite d’ID2D1RenderTarget. ID2D1DCRenderTarget a également les types de membres suivants :

Méthodes

L’interface ID2D1DCRenderTarget possède ces méthodes.

 
ID2D1DCRenderTarget::BindDC

Lie la cible de rendu au contexte de l’appareil dans lequel elle émet des commandes de dessin.

Remarques

Création d’objets ID2D1DCRenderTarget

Pour créer un ID2D1DCRenderTarget, utilisez la méthode ID2D1Factory::CreateDCRenderTarget .

Avant de pouvoir effectuer un rendu avec la cible de rendu du contrôleur de domaine, vous devez utiliser sa méthode BindDC pour l’associer à un contrôleur de domaine GDI. Vous le faites chaque fois que vous utilisez un contrôleur de domaine différent ou la taille de la zone que vous souhaitez dessiner pour les modifications.

Pour permettre à la cible de rendu du contrôleur de domaine de fonctionner avec GDI, définissez son format de pixel sur DXGI_FORMAT_B8G8R8A8_UNORM et son mode alpha sur D2D1_ALPHA_MODE_PREMULTIPLIED ou D2D1_ALPHA_MODE_IGNORE.

Votre application doit créer des cibles de rendu une seule fois et les conserver pendant toute la durée de vie de l’application ou jusqu’à ce que la méthode EndDraw de la cible de rendu retourne l’erreur D2DERR_RECREATE_TARGET . Lorsque vous recevez cette erreur, vous devez recréer la cible de rendu (et toutes les ressources qu’elle a créées).

ID2D1DCRenderTargets, transformations GDI et builds linguistiques de droite à gauche de Windows

Lorsque vous utilisez un ID2D1DCRenderTarget, il restitue le contenu Direct2D dans une bitmap interne, puis restitue la bitmap au contrôleur de domaine avec GDI.

Il est possible pour GDI d’appliquer une transformation GDI (via la méthode SetWorldTransform ) ou un autre effet au même contrôleur de domaine utilisé par la cible de rendu, auquel cas GDI transforme l’image bitmap produite par Direct2D. L’utilisation d’une transformation GDI pour transformer le contenu Direct2D a le potentiel de dégrader la qualité visuelle de la sortie, car vous transformez une bitmap pour laquelle l’anti-attirail et le positionnement de sous-pixel ont déjà été calculés.

Par exemple, supposons que vous utilisez la cible de rendu pour dessiner une scène qui contient des géométries et du texte anti-ataliased. Si vous utilisez une transformation GDI pour appliquer une transformation de mise à l’échelle au contrôleur de domaine et mettre à l’échelle la scène afin qu’elle soit 10 fois plus grande, vous verrez la pixelisation et les bords déchiquetés. (Si, toutefois, vous avez appliqué une transformation similaire à l’aide de Direct2D, la qualité visuelle de la scène ne serait pas dégradée.)

Dans certains cas, il peut ne pas être évident que GDI effectue un traitement supplémentaire susceptible de dégrader la qualité du contenu Direct2D. Par exemple, sur une build RTL (droite à gauche) de Windows, le contenu rendu par un ID2D1DCRenderTarget peut être inversé horizontalement lorsque GDI le copie vers sa destination. Le fait que le contenu soit réellement inversé dépend des paramètres actuels du contrôleur de domaine.

Selon le type de contenu rendu, vous pouvez empêcher l’inversion. Si le contenu Direct2D inclut du texte ClearType, cette inversion dégrade la qualité du texte.

Vous pouvez contrôler le comportement de rendu RTL à l’aide de la fonction GDI SetLayout . Pour empêcher la mise en miroir, appelez la fonction GDI SetLayout et spécifiez LAYOUT_BITMAPORIENTATIONPRESERVED comme seule valeur pour le deuxième paramètre (ne le combinez pas avec LAYOUT_RTL), comme illustré dans l’exemple suivant :

SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);

Exemples

Le code suivant crée une cible de rendu 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);

Dans le code précédent, m_pD2DFactory est un pointeur vers un ID2D1Factory et m_pDCRT est un pointeur vers un ID2D1DCRenderTarget.

L’exemple de code suivant lie un contrôleur de domaine à l’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);

Pour plus d’informations sur l’utilisation de GDI avec Direct2D, consultez Vue d’ensemble de l’interopérabilité direct2D et GDI.

Configuration requise

   
Client minimal pris en charge Windows 7, Windows Vista avec SP2 et Mise à jour de plateforme pour Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 R2, Windows Server 2008 avec SP2 et Mise à jour de plateforme pour Windows Server 2008 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête d2d1.h

Voir aussi

Vue d’ensemble de l’interopérabilité Direct2D et GDI

ID2D1RenderTarget