>我正在尝试覆盖.NET Compact Framework中Windows表单的OnPaint事件。
到目前为止,我能够使用渐变、圆角矩形等绘制控件,这通常无法通过常规控件实现。
但是,当我想使控件不可见时,我遇到了问题。现在,我所做的是重新绘制除那些不可见控件之外的所有控件。由于需要一点时间,因此会导致一些闪烁。
有谁知道窗口如何处理绘制"隐形"控件?或者你能建议任何关于如何实现这一目标的算法或方法吗?
你应该有几件事在做。
- 不要直接绘制到
OnPaint
中交给您的图形对象。 绘制到后台缓冲区,并将其绘制到末尾的图形。 - 覆盖
OnPaintBackground
,让它不执行任何操作。 - 尽可能仅使更改的区域(而不是整个屏幕)无效,以保持剪切区域较小
如果要将单个控件更改为"不可见",则可以更改它并使它的边界矩形无效。 在OnPaint
,您将进行绘图,省略基于 Visibility 属性的"不可见"控件。 只有剪切区域才会更新。 您甚至可以更进一步,检查OnPaint
上的传入剪切区域,并且只费心做绘制逻辑绘制该区域。 不过,这有点复杂,通常不是必需的。
作为替代方案,是否可以在适当的控件上调用 Invalidate() 方法的任何重载以减少需要重新绘制的控件总数?