ID2D1RenderTarget::EndDraw 方法 (d2d1.h)

结束对呈现目标的绘图操作,并指示当前错误状态和相关标记。

语法

HRESULT EndDraw(
  [out, optional] D2D1_TAG *tag1,
  [out, optional] D2D1_TAG *tag2
);

参数

[out, optional] tag1

类型: D2D1_TAG*

此方法返回时,包含导致错误的绘图操作的 标记;如果没有错误,则包含 0。 此参数未经初始化即被传递。

[out, optional] tag2

类型: D2D1_TAG*

此方法返回时,包含导致错误的绘图操作的 标记;如果没有错误,则包含 0。 此参数未经初始化即被传递。

返回值

类型: HRESULT

如果该方法成功,则返回 S_OK。 否则,它将返回 HRESULT 错误代码,并将 tag1tag2 设置为发生错误时处于活动状态的标记。

注解

只能在 BeginDrawEndDraw 调用之间发出绘图操作。

BeginDrawEndDraw 用于指示 Direct2D 系统正在使用呈现器目标。 调用 BeginDraw,ID2D1RenderTarget 的不同实现的行为可能会有所不同。 ID2D1BitmapRenderTarget 可能在 BeginDraw EndDraw/ 调用之间锁定,DXGI 图面呈现目标可能在 BeginDraw 上获取并在 EndDraw 上释放,ID2D1HwndRenderTarget 可能在 BeginDraw 开始批处理,并可能显示在 EndDraw 上。

必须先调用 BeginDraw 方法,然后才能调用呈现操作,但即使在 BeginDraw/EndDraw 之外也可以执行状态设置和状态检索操作。

调用 BeginDraw 后,呈现器目标通常会生成一批呈现命令,但会延迟这些命令的处理,直到内部缓冲区已满、调用 Flush 方法或调用 EndDraw 为止。 EndDraw 方法会导致完成任何批处理的绘图操作,然后返回一个 HRESULT,指示操作成功,并选择性地指示错误发生时呈现目标的标记状态。 EndDraw 方法始终成功:即使以前的 EndDraw 导致 HRESULT 失败,也不应调用它两次。

如果在调用 EndDraw 时没有匹配对 BeginDraw 的调用,它将返回一个错误,指示必须在 EndDraw 之前调用 BeginDraw

在呈现器目标上调用 BeginDraw 两次会将目标置于错误状态,其中不会进一步绘制任何内容,并在调用 EndDraw 时返回相应的 HRESULT 和错误信息。

示例

以下示例使用 ID2D1HwndRenderTarget 将文本绘制到窗口。

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

要求

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

另请参阅

ID2D1RenderTarget