使用Direct2D绘图与实时数据从一个计时器

Using Direct2D drawing with real-time data from a timer

本文关键字:一个 计时器 绘图 Direct2D 实时 数据 使用      更新时间:2023-10-16

我使用Direct2D与MFC,想知道如何使用实时数据来更新渲染目标。例如,我有以下AFX_WM_DRAW2D处理程序:

afx_msg LRESULT CTestView::OnDraw2d(WPARAM wParam, LPARAM lParam)
{
    CString text;
    CHwndRenderTarget* pRenderTarget = (CHwndRenderTarget*)lParam;
    ASSERT_VALID(pRenderTarget);
    // Clear window background
    pRenderTarget->Clear(ColorF(ColorF::Beige));
    // Draw text
    CRect rect;
    GetClientRect(rect);
    text.Format(_T("%i"), value);
    pRenderTarget->DrawText(text, rect, m_pBlueBrush, m_pTextFormat);
    return TRUE;
}

变量'value'由计时器全局更新:

void CTestView::OnTimer(UINT_PTR nIDEvent)
{
    CRect rect;
    this->GetWindowRect(&rect);
    this->InvalidateRect(&rect);
    if (value == NULL)
        value = 0;
    value++;
    CView::OnTimer(nIDEvent);
}

不幸的是,我似乎无法弄清楚如何使界面通过Direct2D显示的更新变量被重新绘制。最好的方法是什么?我读到Direct2D比GDI快得多,所以我想我会给它一个机会来处理不断更新的变量。

谢谢!

一方面,绘图操作只能在BeginDraw()EndDraw()调用之间发出。

你必须调用EnableD2DSupport();这是所有。不需要创建渲染目标,调整它的大小,必要时重新创建它,调用BeginDraw, EndDraw等。如果为窗口启用了D2D支持,则所有操作都在MFC框架中完成。