闪烁和“CreateParams”

时间:2013-05-09 05:53:37

标签: .net vb.net flicker createparams

我希望避免在我的应用程序的一个面板中闪烁,经过谷歌搜索 4个月之后,在尝试了子类化的面板后,在这里问了两三次后,在其他论坛中询问后......没有人有解决方案,但今天我在最后一个答案中找到了奇迹的解决方案:Is their a way to stop the picturebox from flickering when being resized?

Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H2000000
            Return cp
        End Get
End Property 'CreateParams

现在我想知道这些代码行是什么。我需要了解我的应用程序正在做什么代码,

是避免闪烁的好方法吗?

MSDN说:

“不应重写CreateParams属性并用于调整派生控件的属性”

但为什么不呢?,这是我发现真正让我的面板闪烁的唯一方法,这就是为什么我想知道更多关于我上面发布的代码的原因,我想了解所有的订单,也是那些的好处sub和negatives,欢迎所有的事情......

有人可以向我解释有关该代码的更多信息吗?

UPDATE:

我已经在我的所有应用程序中测试了“闪烁解决方案”,是的,它是一个闪烁的解决方案...但是有负面因素'因为我的程序转速-200%速度更慢,我的意思是当使用那个覆盖子这些程序变得非常慢,比如x6倍慢,所以使用覆盖子不是一个好主意。

有人知道我是否可以避免闪烁而不会使我的申请变得无聊?

1 个答案:

答案 0 :(得分:1)

每次重绘一个控件时,你还需要重绘背景;您的应用程序可能未声明要完成的资源的操作。您正在使用的解决方案基本上设置了一个标志,表示您希望您的表单及其绘制的所有内容都是双缓冲的。您可以使用此消耗不必要的资源。 相反,您可以在图像重新调整大小的每个对象上将double buffered属性设置为true。 计算机资源有限,您应尽可能多地保留。这就是为什么Microsoft预定了这么多参数和资源释放程序的原因。

编辑:默认情况下,PictureBox是双缓冲来处理onpaint事件。您仍然需要在背景对象上使用双缓冲区。