使用Direct2D绘图和计时器的实时数据

时间:2014-06-04 15:59:00

标签: c++ visual-c++ mfc direct2d

我正在使用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快得多,所以我想我会用它来处理不断更新的变量。

谢谢!

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:-1)

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