使用Direct2D绘图与实时数据从一个计时器
Using Direct2D drawing with real-time data from a timer
我使用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框架中完成。
相关文章:
- 计时器是否从另一个线程启动?
- 制作一个带有 boost::asio::d eadline_timer 的计时器
- 为什么我不能为一个 asio io_service使用两个计时器?
- 如何设置一个"precise"的定期计时器来监控Linux(C / C++)中的内容?
- 是否可以创建一个跳过循环中函数的计时器
- C - 如何制作一个简单的计时器,以及如何使用基于语句的语句使用
- 如何在C++中创建一个循环,运行一个计时器并允许用户同时输入(非阻塞用户输入)
- 我希望计时器只在上一个调用返回或完成执行时调用代码
- C++:创建一个可以调用任何函数的计时器/警报类
- 需要在原生代码中调度一个计时器任务,用于安卓 ndk 开发
- 制作一个计时器,在以毫秒为单位的一定时间后执行某个函数
- 存储提升::计时器产生一个变量
- 我的libevent计时器在另一个事件发生时立即停止.这正常吗?
- 在已经运行的循环上添加另一个计时器
- 错误:无法从另一个线程启动计时器.使用未声明计时器的QFuture
- 做一个更准确的计时器.c#中的计时器存在于c++中
- 创建一个计时器在X秒内调用一个函数
- 使用Direct2D绘图与实时数据从一个计时器
- 如何在用c++创建的测验程序中插入一个倒计时计时器
- 我如何创建一个计时器,反复运行我的程序?c++