【问题标题】:Painting in a custom control and the invalidate mechanism在自定义控件中绘制和无效机制
【发布时间】:2011-10-13 19:17:09
【问题描述】:

我正在创建的自定义控件需要在其客户端空间中绘制许多“项目”。调用 Invalidate() 将触发一个新的绘制周期,其中所有项目都将被重绘。

现在当控件中有很多项并且发生很多导航时,需要进行优化;所以我需要触发一个只绘制一个或两个项目的绘制周期。我存储对这些项目的引用,以便绘制方法 (OnPaint) 知道它是“快速”的。

困难在于,在执行 OnPaint 时,很难知道是否同时进行了其他 Invalidate() 调用。在这种情况下,它应该进行“正常”的完整绘制。

我确实使用了剪辑矩形。当然,我可以检查 OnPaint 中的剪辑矩形是否已成为整个客户矩形,这是调用 Invalidate() 的标志,但这不是 100% 安全的。我想到了其他类似的解决方案,但它们看起来很老套。

这个问题通常或最好的解决方法是什么?

【问题讨论】:

    标签: winforms custom-controls invalidation


    【解决方案1】:

    这里的解决方案是使用 BufferedGraphics 类的双缓冲方法。这样一来,您的 OnPaint 中就不会发生太多棘手的事情,而且您可以随时随地进行绘画。

    MSDN: Double Buffered Graphics(在“手动管理缓冲图形”下)

    这是一个有用的例子: Custom Drawing Controls in C# – Manual Double Buffering

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多