none
Winform窗体最小化后,再还原会出现明显的闪烁,控件会明显闪一下 RRS feed

  • 问题

  • 窗体最小化,再还原会出现很明显的闪烁问题(控件大概30个左右,大概有一般需要设置图片)。

    由于项目要求我需要设置窗体的背景图片,取消背景图片确实会好点,但这不是我希望的!- -

    已将窗体的双缓冲设置为true,同时引用了网上的一些方法

    protected override void WndProc(ref Message m)
     {
         if (m.Msg == 0x0014)  //禁止清除背景消息
              return;
         base.WndProc(ref m);
     }

    还有网上说设置SetStyle,我知道这个自定义控件的时候可以用,但是如果将其引入到我的窗体之中该如何用,我试着在构造函数中加入,但是会出现找不到该方法的提示(写代码的时候VS的自动代码提示,显示有这个方法啊,比较郁闷)!

    以上是目前采用的一些方法,效果不好!

    新人,请多多指教!

    2012年10月23日 9:26

全部回复

  • 您好,

    请试一下的方式?

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


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年10月23日 12:55
  • 您好,

    请试一下的方式?

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

    您好,

          谢谢指教,确实好了很多。但是每次还原的时候,窗体不是一次显示出来,而是左上角有一小块先显示,然后整 体在显示出来。

          我的窗体是无边框的,我试了一下,有边框的时候,没有这个问题;去掉边框,没有背景,问题不明显;加了背景图片之后,很明显能看到延迟。中间要停顿1s左右,这个是什么原因,谢谢!

            还有就是对这个cp.ExStyle |= 0x02000000;不太理解。看了您原先的博文,也看了您和Mark的问答,这个大概是等窗体全部绘制完之后再显示,那为什么左上角要先显示呢?

    2012年10月24日 2:51
  • 会是因为您的底图太大了吗?其实是慢在加载底图的时间上。
    有考虑将图缩小吗?
    Windows Forms: using BackgroundImage slows down drawing of the Form's controls

    另外,有测试的专案可给我们立即下载吗?


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年10月24日 11:08