ID2D1HwndRenderTarget-Schnittstelle (d2d1.h)
Rendert Zeichnungsanweisungen in einem Fenster.
Vererbung
Die ID2D1HwndRenderTarget-Schnittstelle erbt von ID2D1RenderTarget. ID2D1HwndRenderTarget verfügt auch über die folgenden Membertypen:
Methoden
Die ID2D1HwndRenderTarget-Schnittstelle verfügt über diese Methoden.
ID2D1HwndRenderTarget::CheckWindowState Gibt an, ob der diesem Renderziel zugeordnete HWND verworfen ist. |
ID2D1HwndRenderTarget::GetHwnd Gibt den diesem Renderziel zugeordneten HWND zurück. |
ID2D1HwndRenderTarget::Ändern der Größe Ändert die Größe des Renderziels in die angegebene Pixelgröße. (Überladung 2/2) |
ID2D1HwndRenderTarget::Ändern der Größe Ändert die Größe des Renderziels in die angegebene Pixelgröße. (Überladung 1/2) |
Hinweise
Wie bei anderen Renderzielen müssen Sie BeginDraw aufrufen, bevor Sie Zeichnungsbefehle ausgeben. Nachdem Sie das Zeichnen abgeschlossen haben, rufen Sie EndDraw auf, um anzugeben, dass die Zeichnung abgeschlossen ist, und um den Zugriff auf den Puffer freizugeben, der das Renderziel unterstützt.
Für ID2D1HwndRenderTarget ist die einzige Nebenwirkung von BeginDraw die Änderung des Zustands des Renderziels, sodass Zeichnungsbefehle ausgegeben werden können.
EndDraw löscht alle Batch-Zeichenbefehle. Wenn keine Fehler aufgetreten sind, wird auch der Puffer angezeigt, sodass er im zugeordneten Fenster angezeigt wird. Schließlich gibt EndDraw das HRESULT des ersten Fehlers zurück, der beim Zeichnen oder Darstellen aufgetreten ist, sowie den Tagzustand zum Zeitpunkt des Fehlers.
ID2D1HwndRenderTarget-Objekte sind doppelt gepuffert, sodass ausgegebene Zeichnungsbefehle nicht sofort angezeigt werden, sondern auf einer Offscreen-Oberfläche ausgeführt werden. Wenn EndDraw aufgerufen wird, wird der Offscreenpuffer angezeigt, wenn keine Renderingfehler aufgetreten sind. Wenn in dem von EndDraw geleerten Batch Renderfehler aufgetreten sind, wird der Puffer nicht angezeigt, und die Anwendung muss BeginDraw aufrufen und den Frame erneut zeichnen. Flush kann verwendet werden, um vor dem Aufrufen von EndDraw auf Fehler zu überprüfen, wenn eine Anwendung möchte, dass der Frame unabhängig von Fehlern angezeigt wird.
Der Backpuffer eines Hardwarerenderziels ist die von GetPixelSize angegebene Größe. Wenn EndDraw den Puffer darstellt, wird diese Bitmap gestreckt, um die Oberfläche abzudecken, an der sie angezeigt wird: den gesamten Clientbereich des Fensters. Diese Dehnung wird mithilfe der bilinearen Filterung durchgeführt, wenn das Renderziel auf Hardware gerendert wird, und mithilfe der nächstgelegenen Filterung, wenn das Renderingziel Software verwendet. (Normalerweise ruft eine Anwendung Die Größe ändern auf, um sicherzustellen, dass die Pixelgröße des Renderziels und die Pixelgröße des Ziels übereinstimmen, und es ist keine Skalierung erforderlich, obwohl dies keine Anforderung ist.)
Für den Fall, dass ein Fenster Adapter überspannt, stellt Direct2D sicher, dass der Teil des Offscreen-Renderziels aus dem Adapter kopiert wird, in dem das Rendering auf den Adapter erfolgt, der den Inhalt anzeigen muss.
Wenn der Adapter, auf dem sich ein Renderziel befindet, entfernt oder der Treiber aktualisiert wurde, während die Anwendung ausgeführt wird, wird dies als Fehler im EndDraw-Aufruf zurückgegeben. In diesem Fall sollte die Anwendung nach Bedarf ein neues Renderziel und ressourcen erstellen.
Erstellen von ID2D1HwndRenderTarget-Objekten
Verwenden Sie zum Erstellen einer ID2D1HwndRenderTarget-Methode die ID2D1Factory::CreateHwndRenderTarget-Methode .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.
Beispiele
Im folgenden Beispiel wird die CreateHwndRenderTarget-Methode verwendet, um ein ID2D1HwndRenderTarget zu erstellen.
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
);
Im nächsten Beispiel wird id2D1HwndRenderTarget verwendet, um Text in das Fenster zu zeichnen.
// 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;
}
Code wurde aus diesem Beispiel weggelassen.
Anforderungen
Anforderung | Wert |
---|---|
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 |