ID2D1RenderTarget::BeginDraw 方法 (d2d1.h)

启动对此呈现目标的绘图。

语法

void BeginDraw();

返回值

备注

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

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

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

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

如果在未匹配调用 BeginDraw 的情况下调用 EndDraw,它将返回一个错误,指示必须在 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