ID2D1DeviceContext::SetTarget 方法 (d2d1_1.h)

Direct2D 设备上下文现在将呈现到的位图或命令列表。

语法

void SetTarget(
  [in, optional] ID2D1Image *image
);

参数

[in, optional] image

类型: ID2D1Image*

Direct2D 设备上下文将呈现到的图面或命令列表。

返回值

备注

可以随时更改目标,包括绘制上下文时。

目标可以是使用 D2D1_BITMAP_OPTIONS_TARGET 标志创建的位图,也可以是命令列表。 无法将其他类型的图像设置为目标。 例如,不能将效果的输出设置为目标。 如果目标无效,则上下文将进入 D2DERR_INVALID_TARGET 错误状态。

不能使用 SetTarget 同时从多个设备上下文呈现到位图/命令列表。 如果图像曾经在 BeginDraw EndDraw/ 时间跨度内的设备上下文上设置过,则它被视为“正在呈现到”。 如果尝试通过多个设备上下文呈现到图像,则第一个设备上下文之后的所有后续设备上下文都将进入错误状态。

希望将图像附加到第二个设备上下文的调用方应首先在第一个设备上下文上调用 EndDraw

下面是正确调用顺序的示例。

pDC1->BeginDraw();
pDC1->SetTarget(pImage);
// …
pDC1->EndDraw();

pDC2->BeginDraw();
pDC2->SetTarget(pImage);
// …
pDC2->EndDraw();

下面是错误调用顺序的示例。

pDC1->BeginDraw();
pDC2->BeginDraw();

pDC1->SetTarget(pImage);

// ...

pDC1->SetTarget(NULL);

pDC2->SetTarget(pImage); // This call is invalid, even though pImage is no longer set on pDC1.

// ...

pDC1->EndDraw(); // This EndDraw SUCCEEDs.
pDC2->EndDraw(); // This EndDraw FAILs


注意 更改目标不会更改 HWND 呈现目标从中呈现的位图,也不会更改 DC 呈现目标向/从中转换的位图。
 
此 API 使应用程序能够轻松地将位图用作源 (,例如 在 DrawBitmap) 中,同时用作目标。 尝试将位图用作与目标绑定的同一设备上下文中的源会将设备上下文置于D2DERR_BITMAP_BOUND_AS_TARGET错误状态。

一次在多个呈现目标上将位图绑定为目标位图是可以接受的。 执行此操作的应用程序必须使用 FlushEndDraw 正确同步呈现。

可以随时更改目标,包括绘制上下文时。

可以将目标设置为 NULL,在这种情况下,绘图调用会将设备上下文置于错误状态,D2DERR_WRONG_STATE。 使用 NULL 目标调用 SetTarget 不会将原始目标位图还原到设备上下文。

如果设备上下文具有未完成的 HDC,则上下文将进入 D2DERR_WRONG_STATE 错误状态。 目标不会更改。

如果位图和设备上下文不在同一资源域中,则上下文将进入 \ 错误状态。 目标不会更改。

ID2D1RenderTarget::GetPixelSize 返回当前目标位图的大小 (或 0, 0) (如果没有绑定位图) )。 ID2D1RenderTarget::GetSize 返回按呈现器目标的 DPI 缩放的当前位图的像素大小。 SetTarget 不会影响呈现目标的 DPI。

ID2D1RenderTarget::GetPixelFormat 返回当前目标位图 (或 DXGI_FORMAT_UNKNOWN的像素格式, D2D1_ALPHA_MODE_UNKNOWN 如果没有) 。

ID2D1Bitmap::CopyFromRenderTarget 从当前绑定的目标位图复制。

要求

要求
最低受支持的客户端 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |UWP 应用]
最低受支持的服务器 适用于 Windows Server 2008 R2 的Windows Server 2012和平台更新 [桌面应用 |UWP 应用]
目标平台 Windows
标头 d2d1_1.h
DLL D2d1.dll

另请参阅

ID2D1Bitmap1

ID2D1DeviceContext

ID2D1DeviceContext::CreateBitmap

ID2D1DeviceContext::GetTarget