【问题标题】:Is it necessary to invalidate update region before painting in the window在窗口中绘画之前是否需要使更新区域无效
【发布时间】:2014-07-11 18:12:54
【问题描述】:

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

【问题讨论】:

    标签: c++ winapi direct2d wm-paint


    【解决方案1】:

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

    当然,这可能因您的情况而异,具体取决于您正在创建的程序类型。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-05
        • 2018-11-16
        • 2011-08-15
        • 2013-09-09
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多