2

我正在尝试覆盖.NET Compact Framework中 windows 窗体的OnPaint事件。

到目前为止,我能够绘制带有渐变、圆角矩形等的控件,而这些控件通常无法使用常规控件。

但是,当我想让控件不可见时,我遇到了问题。现在,我所做的是重新绘制除那些不可见的控件之外的所有控件。由于需要一些时间,因此会导致一些闪烁。

有谁知道windows如何处理绘制“不可见”控件?或者你能建议任何关于如何实现这一目标的算法或方法。

4

2 回答 2

1

你应该做几件事。

  1. 不要直接对交给你的 Graphics 对象进行绘制OnPaint。绘制到后台缓冲区,并在最后将其绘制到 Graphics。
  2. 覆盖OnPaintBackground并让它什么都不做。
  3. 尽可能只使变化的区域无效,而不是整个屏幕,以保持剪切区域较小

如果您将单个控件更改为“不可见”,那么您将更改它并使它的边界矩形无效。在OnPaint您进行绘图的过程中,省略了基于 Visibility 属性的“不可见”控件。只有剪辑区域会得到更新。您甚至可以通过检查传入的剪辑区域OnPaint并只费心绘制该区域的绘制逻辑来更进一步。不过,这有点复杂,而且通常不是必需的。

于 2012-11-27T16:58:36.520 回答
0

作为替代方案,是否可以在适当的控件上调用Invalidate()方法的任何重载以减少需要重新绘制的控件总数?

于 2012-11-27T15:46:40.723 回答