处理密集的OnPaint

时间:2015-02-17 12:36:06

标签: c# winforms drawing drawtext

在Windows窗体OnPaint的{​​{1}}内,我将单个字打印到32x32“单元格”网格中。

由于定位的原因,并且因为单词需要以不同的颜色(全部和部分)打印,我为每个值调用PictureBox,因此在TextRenderer.DrawText()内有一个循环导致1000 +致电OnPaint

这没问题。

我添加了代码以允许在DrawText

中进行点击拖动选择

PictureBox中(如果设置了MouseMove标志)我捕获鼠标当前所在的单元格;如果它和我上次没有做的一样,否则我需要绘制/更新选择矩形,我这样做是通过:

_isDragging

PictureBox.Invalidate(this.GetSelectionRect()); 返回我想要绘制的选区的矩形。

在设置GetSelectionRect()的{​​{1}}结束时,我绘制一个Alpha矩形以显示所选项目。 这是有效的,我的选择矩形被绘制在它应该的位置,但问题是它是滞后的 - 它落后于拖动光标(尽管没有闪烁)。

这显然是因为OnPaint需要在绘制完矩形之前渲染所有内容,而_isDragging在拖动时每秒会导致多个绘制。

这种方法似乎不是做事的方式,我认为我错过了一些明显的东西。

我想知道避免这种情况的标准方法是什么?即减轻OnPaint需要做的工作量?

0 个答案:

没有答案