ID2D1DCRenderTarget 接口 (d2d1.h)

将命令绘制到 GDI 设备上下文时出现问题。

继承

ID2D1DCRenderTarget 接口继承自 ID2D1RenderTargetID2D1DCRenderTarget 还具有以下类型的成员:

方法

ID2D1DCRenderTarget 接口具有这些方法。

 
ID2D1DCRenderTarget::BindDC

将呈现器目标绑定到它向其发出绘图命令的设备上下文。

备注

创建 ID2D1DCRenderTarget 对象

若要创建 ID2D1DCRenderTarget,请使用 ID2D1Factory::CreateDCRenderTarget 方法。

在使用 DC 呈现器目标进行呈现之前,必须使用其 BindDC 方法将其与 GDI DC 相关联。 每次使用不同的 DC 或要绘制的区域的大小都会发生变化时执行此操作。

若要使 DC 呈现目标能够使用 GDI,请将其像素格式设置为 DXGI_FORMAT_B8G8R8A8_UNORM ,将其 alpha 模式设置为 D2D1_ALPHA_MODE_PREMULTIPLIEDD2D1_ALPHA_MODE_IGNORE

应用程序应创建呈现目标一次,并在应用程序的生命周期内保留这些目标,或者直到呈现目标的 EndDraw 方法返回 D2DERR_RECREATE_TARGET 错误为止。 收到此错误时,需要重新创建呈现目标 (以及它) 创建的任何资源。

Windows 的 ID2D1DCRenderTargets、GDI 转换和从右到左语言版本

使用 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_pD2DFactory 是指向 ID2D1Factory 的指针, m_pDCRT 是指向 ID2D1DCRenderTarget 的指针。

下一个代码示例将 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);

有关将 GDI 与 Direct2D 配合使用的详细信息,请参阅 Direct2D 和 GDI 互操作概述

要求

   
最低受支持的客户端 Windows 7、带 SP2 的 Windows Vista 和适用于 Windows Vista 的平台更新 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2008 R2、Windows Server 2008 SP2 和适用于 Windows Server 2008 的平台更新 [桌面应用 |UWP 应用]
目标平台 Windows
标头 d2d1.h

另请参阅

Direct2D 和 GDI 互操作概述

ID2D1RenderTarget