在窗口中绘制之前是否有必要使更新区域无效?
Is it necessary to invalidate update region before painting in the window
如果我使用Direct2D,是否有必要在立即绘制(响应用户操作)之前使更新区域无效?或者叫RenderTarget::BeginDraw()
就够了吗?我需要快速重新绘制WM_PAINT
消息之外的窗口的某些部分。如果我不使更新区域无效,有时窗口的整个客户端区域会变成黑色,看不到任何绘图。但是,如果我使更新区域无效,系统会在我验证更新区域之前发送WM_PAINT
消息,这会导致执行不必要的绘图操作。如果我使用Direct2D,我应该如何实现WM_PAINT
消息处理程序之外的即时绘图操作?
无效和验证是获取和处理WM_PAINT消息的方法。如果你在WM_PAINT处理程序之外绘制,你不应该将无效或验证作为该绘制的一部分。
也就是说,在WM_PAINT处理程序之外进行绘制是非常罕见的。要做到这一点是非常困难的。我的建议是首先通过传统的WM_PAINT处理程序获得所有工作,然后决定是否真的有必要在该处理程序之外做一些绘画。
通常在游戏类应用程序中使用Direct2D时,您在WM_PAINT中不执行绘图,并且每秒使用Direct2D绘制多次。另一种常见的技术是,当你画了一些东西,而不是每秒多次创建一个新图纸的情况下,将图纸存储在某种类型的回缓冲区中;这样你就可以在响应WM_PAINT消息时将其"blit"到屏幕上。
当然,根据您所创建的程序的类型,这可能会有所不同。
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 将QGraphicsItem的移动区域限制在多边形区域内
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- VC++ dll 代码区域未更新:VS2010
- 尝试在Qt中仅更新小部件中的一个矩形,但整个小部件的区域都会更新
- 在窗口中绘制之前是否有必要使更新区域无效?
- QPaintEvent -只更新屏幕的一个区域
- "BeginPaint"函数如何知道更新区域 - Windows 编程?