ID2D1DCRenderTarget 介面 (d2d1.h)

將命令繪製到 GDI 裝置內容時發生問題。

繼承

ID2D1DCRenderTarget介面繼承自ID2D1RenderTargetID2D1DCRenderTarget 也有下列類型的成員:

方法

ID2D1DCRenderTarget介面具有這些方法。

 
ID2D1DCRenderTarget::BindDC

將轉譯目標系結至發出繪圖命令的裝置內容。

備註

建立 ID2D1DCRenderTarget 物件

若要建立 ID2D1DCRenderTarget,請使用 ID2D1Factory::CreateDCRenderTarget 方法。

您必須先使用其 BindDC 方法將它與 GDI DC 產生關聯,才能使用 DC 轉譯目標進行轉譯。 每次使用不同的 DC,或您想要繪製到變更的區域大小時,都會執行這項操作。

若要讓 DC 轉譯目標能夠使用 GDI,請將其像素格式設定為 DXGI_FORMAT_B8G8R8A8_UNORM ,並將其 Alpha 模式設定為 D2D1_ALPHA_MODE_PREMULTIPLIEDD2D1_ALPHA_MODE_IGNORE

您的應用程式應該建立轉譯目標一次,並在應用程式存留期間或直到轉譯目標的 EndDraw 方法傳回 D2DERR_RECREATE_TARGET 錯誤為止。 當您收到此錯誤時,您必須重新建立轉譯目標 (及其) 建立的任何資源。

ID2D1DCRenderTargets、GDI 轉換和 Windows 的由右至左語言組建

當您使用 ID2D1DCRenderTarget時,它會將 Direct2D 內容轉譯為內部點陣圖,然後使用 GDI 將點陣圖轉譯至 DC。

GDI 可以透過 SetWorldTransform 方法套用 GDI 轉換 (,) 或其他效果套用至轉譯目標所使用的相同 DC,在此情況下,GDI 會轉換 Direct2D 所產生的點陣圖。 使用 GDI 轉換來轉換 Direct2D 內容可能會降低輸出的視覺品質,因為您正在轉換已計算反鋸齒和子圖元位置的點陣圖。

例如,假設您使用轉譯目標來繪製包含反鋸齒幾何和文字的場景。 如果您使用 GDI 轉換將縮放轉換套用至 DC 並調整場景,使其大於 10 倍,您會看到像素化和不規則邊緣。 (如果您使用 Direct2D 套用類似的轉換,場景的視覺品質將不會降級。)

在某些情況下,GDI 執行可能會降低 Direct2D 內容品質的額外處理可能並不明顯。 例如,在由右至左 (RTL) Windows 組建上,當 GDI 將它複製到目的地時, ID2D1DCRenderTarget 所轉譯的內容可能會水準反轉。 內容是否實際反轉取決於 DC 目前的設定。

視要呈現的內容類型而定,您可能會想要防止反轉。 如果 Direct2D 內容包含 ClearType 文字,此反轉會降低文字的品質。

您可以使用 SetLayout GDI 函式來控制 RTL 轉譯行為。 若要防止鏡像,請呼叫 SetLayout GDI 函式,並指定 LAYOUT_BITMAPORIENTATIONPRESERVED 做為第二個參數的唯一值, (不要將其與 LAYOUT_RTL) 結合,如下列範例所示:

SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);

範例

下列程式碼會建立 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);

在上述程式碼中, m_pD2DFactoryID2D1Factory的指標, m_pDCRTID2D1DCRenderTarget的指標。

下一個程式碼範例會將 DC 系結至 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);

如需搭配 Direct2D 使用 GDI 的詳細資訊,請參閱 Direct2D 和 GDI 交互操作概觀

規格需求

   
最低支援的用戶端 適用于 Windows Vista 的 Windows 7、Windows Vista SP2 和平臺更新 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 R2、Windows Server 2008 SP2 和 Platform Update for Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 d2d1.h

另請參閱

Direct2D 和 GDI 交互操作概觀

ID2D1RenderTarget