我有一个用作绘图表面的简单面板。在某些情况下,此处的目标是在子ListView周围绘制4像素宽的轮廓。当可以将某些东西拖到轮廓中时,我想使轮廓变得脉动。
我只是在ListView周围绘制一个简单的矩形,并在计时器刻度事件内部更新矩形的不透明度。更改不透明度时,将重新绘制边框。此时,我正在双重缓冲绘画。我还只允许每15个滴答左右重绘一次(计时器间隔为20毫秒)。在完成所有这些操作之后,绘制过程仍然有些闪烁。这是不可接受的,因此我需要一些有关如何避免这种情况的指导。
我看不到经常绘制控件的方法。需要从不透明到实体的平滑过渡,然后再返回。当我充分降低刻度线间隔(降低到大约300 -500 ms)时,闪烁停止,但是刷新速度太慢。
我愿意接受任何想法。也许我的解决方法是完全错误的,或者你们中的一个已经创建了发光效果并知道该怎么做。感谢您的任何帮助。
最佳答案
如果有人感兴趣,我偶然发现了一个解决方案。事实证明,闪烁是由背景绘画引起的。我用SetStyle告诉控件,我将处理所有绘画。
SetStyle(ControlStyles.SupportsTransparentBackColor |
ControlStyles.Opaque |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
然后,我先在该区域上绘制透明颜色,然后再绘制边框。我有点骇人听闻,但它就像一个魅力。
编辑:并且记得还要对图像进行双缓冲。