Interface ID2D1HwndRenderTarget (d2d1.h)

Affiche les instructions de dessin dans une fenêtre.

Héritage

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

Méthodes

L’interface ID2D1HwndRenderTarget contient ces méthodes.

 
ID2D1HwndRenderTarget ::CheckWindowState

Indique si le HWND associé à cette cible de rendu est obstrué.
ID2D1HwndRenderTarget ::GetHwnd

Retourne le HWND associé à cette cible de rendu.
ID2D1HwndRenderTarget ::Resize

Modifie la taille de la cible de rendu à la taille de pixel spécifiée. (surcharge 2/2)
ID2D1HwndRenderTarget ::Resize

Modifie la taille de la cible de rendu à la taille de pixel spécifiée. (surcharge 1/2)

Remarques

Comme c’est le cas avec d’autres cibles de rendu, vous devez appeler BeginDraw avant d’émettre des commandes de dessin. Une fois le dessin terminé, appelez EndDraw pour indiquer que le dessin est terminé et pour libérer l’accès à la mémoire tampon qui sauvegarde la cible de rendu.

Pour ID2D1HwndRenderTarget, le seul effet secondaire de BeginDraw est la modification de l’état de la cible de rendu pour autoriser l’émission de commandes de dessin.

EndDraw vide toutes les commandes de dessin par lot. Si aucune erreur ne s’est produite, il présente également la mémoire tampon, ce qui entraîne son affichage dans la fenêtre associée. Enfin, EndDraw retourne le HRESULT de la première erreur qui s’est produite lors du dessin ou de la présentation, ainsi que l’état de la balise au moment où l’erreur s’est produite.

Les objets ID2D1HwndRenderTarget étant à double mise en mémoire tampon, les commandes de dessin émises n’apparaissent pas immédiatement, mais sont effectuées sur une surface hors écran. Quand EndDraw est appelé, s’il n’y a pas eu d’erreurs de rendu, la mémoire tampon hors écran est présentée. S’il y a eu des erreurs de rendu dans le lot vidé par EndDraw, la mémoire tampon n’est pas présentée et l’application doit appeler BeginDraw et dessiner à nouveau le cadre. Le vidage peut être utilisé pour case activée pour les erreurs avant d’appeler EndDraw si une application souhaite que le cadre soit présenté, quelles que soient les erreurs.

Le back-buffer d’une cible de rendu matériel est la taille spécifiée par GetPixelSize. Si EndDraw présente la mémoire tampon, cette bitmap est étirée pour couvrir la surface où elle est présentée : toute la zone cliente de la fenêtre. Cette extension est effectuée à l’aide du filtrage biligne si la cible de rendu est rendue dans le matériel et du filtrage voisin le plus proche si la cible de rendu utilise un logiciel. (En règle générale, une application appelle Redimensionner pour s’assurer que la taille de pixels de la cible de rendu et la taille des pixels de la destination correspondent, et qu’aucune mise à l’échelle n’est nécessaire, bien que ce ne soit pas obligatoire.)

Dans le cas où une fenêtre chevauche des adaptateurs, Direct2D garantit que la partie de la cible de rendu hors écran est copiée à partir de l’adaptateur où le rendu se produit vers l’adaptateur qui doit afficher le contenu.

Si l’adaptateur sur lequel se trouve une cible de rendu a été supprimé ou si le pilote a été mis à niveau pendant l’exécution de l’application, cela est retourné en tant qu’erreur dans l’appel EndDraw . Dans ce cas, l’application doit créer une cible de rendu et des ressources si nécessaire.

Création d’objets ID2D1HwndRenderTarget

Pour créer un ID2D1HwndRenderTarget, utilisez la méthode ID2D1Factory ::CreateHwndRenderTarget .

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

Exemples

L’exemple suivant utilise la méthode CreateHwndRenderTarget pour créer un 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
    );

L’exemple suivant utilise l’ID2D1HwndRenderTarget pour dessiner du texte vers la fenêtre.

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

Le code a été omis dans cet exemple.

Configuration requise

Condition requise Valeur
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

ID2D1RenderTarget