码迷,mamicode.com
首页 > Windows程序 > 详细

[WIN]如何让您的UserControl显示时不闪烁

时间:2019-09-09 09:14:15      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:rop   return   var   com   padding   ack   net   ase   code   

[WIN]如何让您的UserControl显示时不闪烁


前言

之前将.net 1.1 Windows Form程序升级到.net 4.0,结果在开画面时,闪的非常利害!? 于是就开始找解决方法。

研究及解决

开始找到了设定DoubleBuffer=true,这个有一点点用,在高档的机器上面,但是在4年前的NB问题还是一样,尤其是当画面对象很多时,感觉是一个一个画出来! 还是被USER当~~

后来找到了“How to fix the flickering in User controls”,照他的方式来做,性能果然是一粒一的好呀!

他的方式是在Form及UserControl上覆写CreateParams,程序如下,

Form上的Code

C#

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
} 


VB

Protected Overrides ReadOnly Property CreateParams As System.Windows.Forms.CreateParams
    Get
        Dim cp As CreateParams = MyBase.CreateParams
        cp.ExStyle = cp.ExStyle Or &H2000000
        ‘ Turn on WS_EX_COMPOSITED
        Return cp
    End Get
End Property


UserControl的Code

C#

protected override CreateParams CreateParams {
  get {
    var parms = base.CreateParams;
    parms.Style &= ~0x02000000;  // Turn off WS_CLIPCHILDREN
    return parms;
  }
}


VB

Protected Overrides ReadOnly Property CreateParams As System.Windows.Forms.CreateParams
    Get
        Dim parms As System.Windows.Forms.CreateParams = MyBase.CreateParams
        ‘Turn off WS_CLIPCHILDREN
        parms.Style = (parms.Style And (Not &H2000000))
        Return parms
    End Get
End Property


运行状况:

1.在XP机器上,Border不会显示出来!

2.只要在Form上加入 Or &H2000000即可有效果,UserControl可不需加入那一段Code!

3.如果Form上没有加入 Or &H2000000,而UserControl有加入 And (Not &H2000000)的话,画面上的Label会有显示不出来的状况!

参考数据:How to fix the flickering in User controls

原文:大专栏  [WIN]如何让您的UserControl显示时不闪烁


[WIN]如何让您的UserControl显示时不闪烁

标签:rop   return   var   com   padding   ack   net   ase   code   

原文地址:https://www.cnblogs.com/petewell/p/11489711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!