4

我想避免在我的应用程序面板中闪烁,从4 个月前进行谷歌搜索后,尝试子类面板后,在这里询问两三次后,在其他论坛中询问后......没有人有解决方案,但今天我找到了在最后一个答案中奇迹般的解决方案:他们是一种阻止图片框在调整大小时闪烁的方法吗?

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 属性并用于调整派生控件的属性”

但为什么不呢?,这是我发现真正让我的面板闪烁的唯一方法,这就是为什么我想了解更多关于我上面发布的代码的原因,我想了解所有订单,以及该子的好处和负面的,所有的事情都是受欢迎的......

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

UPDATE:

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

有人知道我是否可以在不影响我的应用程序的情况下避免闪烁?

4

1 回答 1

1

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

编辑:默认情况下,PictureBox 是双缓冲的,以处理 onpaint 事件。您仍然需要对背景对象进行双缓冲。

于 2015-07-09T04:30:34.107 回答