53

我不知道这三种方法中哪一种最适合我。他们都为我工作。有谁知道刷新、更新和重绘之间的区别?

4

3 回答 3

42

根据在线文档:

刷新- 在屏幕上重新绘制控件。

调用 Refresh 方法立即重绘控件。Refresh 调用 Repaint 方法。交替使用 Refresh 和 Repaint 方法。

重绘- 强制控件在屏幕上重绘其图像。

调用 Repaint 以强制控件立即重新绘制其图像。如果 ControlStyle 属性包含 csOpaque,则控件直接绘制自身。否则,Repaint 方法调用 Invalidate 方法,然后调用 Update 方法,以便控件下方的控件的任何可见部分也将被重新绘制。

更新- 立即处理任何挂起的绘制消息。

调用 Update 以强制在进行任何可能耗时的处理之前重新绘制控件。使用更新向无法等待 Windows 绘制消息到达的用户提供即时反馈。

更新不会使控件无效,而只是强制重新绘制已经无效的任何区域。而是调用 Repaint 以使控件无效。

于 2009-08-09T09:34:41.490 回答
39

您的问题已经得到解答,但如果您需要良好的性能和更少的闪烁,则应改为调用 Invalidate。它允许 Windows 优化绘画过程。

无效- 完全重绘控件。

当需要重新绘制整个控件时使用 Invalidate。当控件内有多个区域需要重绘时,Invalidate 会导致整个窗口一次重绘,避免重复重绘导致的闪烁。在实际重绘控件之前多次调用 Invalidate 不会造成性能损失。

于 2009-08-09T10:12:13.617 回答
4

根据较旧的(CBuilder 6)VCL 参考:

Invalidate “Invalidate 通知控件其整个表面需要重绘。调用 Invalidate 可以防止由一系列部分重绘引起的闪烁。在控件实际重绘之前多次调用 Invalidate 不会造成性能损失”。

在控件更新之前不会发生实际的重绘。要强制立即重新绘制,请改为调用 Repaint。

重绘“TWinControl:: Repaint调用 Invalidate 方法,然后调用 Update 方法来重绘控件”(稍微解释一下)。

(遗憾的是,较旧的参考文献比我拥有的新参考文献更好、更完整(CBuilder 2007)。

于 2011-10-21T21:11:44.907 回答