【发布时间】:2011-10-13 19:17:09
【问题描述】:
我正在创建的自定义控件需要在其客户端空间中绘制许多“项目”。调用 Invalidate() 将触发一个新的绘制周期,其中所有项目都将被重绘。
现在当控件中有很多项并且发生很多导航时,需要进行优化;所以我需要触发一个只绘制一个或两个项目的绘制周期。我存储对这些项目的引用,以便绘制方法 (OnPaint) 知道它是“快速”的。
困难在于,在执行 OnPaint 时,很难知道是否同时进行了其他 Invalidate() 调用。在这种情况下,它应该进行“正常”的完整绘制。
我确实使用了剪辑矩形。当然,我可以检查 OnPaint 中的剪辑矩形是否已成为整个客户矩形,这是调用 Invalidate() 的标志,但这不是 100% 安全的。我想到了其他类似的解决方案,但它们看起来很老套。
这个问题通常或最好的解决方法是什么?
【问题讨论】:
标签: winforms custom-controls invalidation