在窗口中绘制之前是否有必要使更新区域无效?

Is it necessary to invalidate update region before painting in the window

本文关键字:更新 区域 无效 窗口 绘制 是否      更新时间:2023-10-16

如果我使用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"到屏幕上。

当然,根据您所创建的程序的类型,这可能会有所不同。