Condividi tramite


Interfaccia ID2D1HwndRenderTarget (d2d1.h)

Esegue il rendering delle istruzioni di disegno in una finestra.

Ereditarietà

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

Metodi

L'interfaccia ID2D1HwndRenderTarget include questi metodi.

 
ID2D1HwndRenderTarget::CheckWindowState

Indica se l'HWND associato a questa destinazione di rendering è occluso.
ID2D1HwndRenderTarget::GetHwnd

Restituisce l'HWND associato a questa destinazione di rendering.
ID2D1HwndRenderTarget::Resize

Modifica le dimensioni della destinazione di rendering in base alle dimensioni del pixel specificate. (overload 2/2)
ID2D1HwndRenderTarget::Resize

Modifica le dimensioni della destinazione di rendering in base alle dimensioni del pixel specificate. (overload 1/2)

Commenti

Come accade con altre destinazioni di rendering, è necessario chiamare BeginDraw prima di eseguire comandi di disegno. Al termine del disegno, chiama EndDraw per indicare che il disegno è terminato e per rilasciare l'accesso al buffer che esegue il backup della destinazione di rendering.

Per ID2D1HwndRenderTarget, l'unico effetto collaterale di BeginDraw sta modificando lo stato della destinazione di rendering per consentire l'esecuzione dei comandi di disegno.

EndDraw scarica tutti i comandi di disegno in batch. Se non si sono verificati errori, presenta anche il buffer, causandone la visualizzazione nella finestra associata. Infine, EndDraw restituisce l'HRESULT del primo errore che si è verificato nel disegno o nella presentazione, nonché lo stato del tag al momento in cui si è verificato l'errore.

Gli oggetti ID2D1HwndRenderTarget vengono memorizzati nel doppio buffer, quindi i comandi di disegno emessi non vengono visualizzati immediatamente, ma vengono eseguiti su una superficie fuori schermo. Quando viene chiamato EndDraw , se non sono stati generati errori di rendering, viene visualizzato il buffer offscreen. Se si sono verificati errori di rendering nel batch scaricato da EndDraw, il buffer non viene presentato e l'applicazione deve chiamare BeginDraw e disegnare nuovamente il frame. Lo scaricamento può essere usato per verificare la presenza di errori prima di chiamare EndDraw se un'applicazione vuole che il frame venga presentato indipendentemente dagli errori.

Il back-buffer di una destinazione di rendering hardware è la dimensione specificata da GetPixelSize. Se EndDraw presenta il buffer, questa bitmap viene estesa per coprire la superficie in cui viene presentata: l'intera area client della finestra. Questa estensione viene eseguita usando il filtro bilineare se la destinazione di rendering esegue il rendering nell'hardware e usa il filtro più vicino se la destinazione di rendering usa il software. In genere, un'applicazione chiamerà Resize per garantire la dimensione in pixel della destinazione di rendering e le dimensioni in pixel della corrispondenza di destinazione e non è necessaria alcuna scalabilità, anche se non è un requisito.

Nel caso in cui una finestra straddles adapters, Direct2D garantisce che la parte della destinazione di rendering fuori schermo venga copiata dalla scheda in cui si verifica il rendering nell'adattatore che deve visualizzare il contenuto.

Se l'adattatore su cui si trova una destinazione di rendering è stato rimosso o il driver è stato aggiornato durante l'esecuzione dell'applicazione, viene restituito come errore nella chiamata a EndDraw . In questo caso, l'applicazione deve creare una nuova destinazione di rendering e risorse in base alle esigenze.

Creazione di oggetti ID2D1HwndRenderTarget

Per creare un oggetto ID2D1HwndRenderTarget, utilizzare il metodo ID2D1Factory::CreateHwndRenderTarget .

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.

Esempio

Nell'esempio seguente viene utilizzato il metodo CreateHwndRenderTarget per creare un oggetto 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
    );

Nell'esempio seguente viene usato ID2D1HwndRenderTarget per disegnare testo nella finestra.

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

Il codice è stato omesso da questo esempio.

Requisiti

Requisito Valore
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

ID2D1RenderTarget