0

如果我使用 Direct2D,是否有必要在立即绘制(响应用户操作)之前使更新区域无效?还是打电话RenderTarget::BeginDraw()就够了?我需要在WM_PAINT消息之外快速重新绘制窗口的某些部分。如果我不使更新区域无效,有时窗口的整个客户区域会变黑,看不到任何图纸。但是,如果我确实使更新区域无效,系统WM_PAINT会在我验证更新区域之前发送一条消息,这会导致执行不必要的绘图操作。WM_PAINT如果我使用 Direct2D,我应该如何在消息处理程序之外实现即时绘图操作?

4

2 回答 2

0

通常,当在类似游戏的应用程序中使用 Direct2D 时,您不会在 WM_PAINT 中执行任何绘图,而是每秒使用 Direct2D 进行多次绘图。另一种常见的技术,对于您绘制一次并且每秒不多次创建新绘图的情况,是将绘图存储在某种后台缓冲区中;这样您就可以将其“blit”到屏幕上以响应 WM_PAINT 消息。

当然,这对于您的情况可能会有所不同,具体取决于您正在创建的程序类型。

于 2014-05-25T00:30:15.723 回答
0

无效和验证是获取 WM_PAINT 消息并处理消息的方法。如果您在 WM_PAINT 处理程序之外进行绘制,则不应将其作为该绘图的一部分进行无效或验证。

也就是说,在 WM_PAINT 处理程序之外进行绘制是非常罕见的。很难做到正确。我的建议是首先通过传统的 WM_PAINT 处理程序让一切工作,然后决定是否真的有必要在该处理程序之外进行一些绘画。

于 2014-05-22T17:12:40.837 回答