关于窗体(Windows Form)的CreateParams(属性或参数)的一点总结

    我们如果使用过MFC的人都知道,其实CreateParams是封装创建控件时需要的信息,也就是它是CreateWindowEx的参数,重写它就可以设置控件创建时的样式.由此很多人在开发时不满足当前窗体的样式时,往往就想到要重写这个了,有过MFC或MFC项目经验的同学都知道,创建一个窗体里有一个受保护(protected)的属性(CreateParams,这个属性一般被封装保护的),由此当不满足Microsoft提供的默认样式时就可以重写它,通过如下情形进行说明

        1,如果Winform中某个控件(窗体)只提供有横向摆放设置而无竖直摆放设置怎么办?如Winform的ProgressBar,我想用它来表示平板中的电量怎么办?

              我们可以通过继承并重写出一个新的控件就可以解决问题如:

              class VerticalProgressBar: System.Windows.Forms.ProgressBar
             {
                   protected override CreateParams CreateParams
                   {
                     get
                     {
                        var param = base.CreateParams;
                       param.Style |= 0x04;//每个样式的值,大家可以参考MS的结构定义!MFC熟悉的同学都知道,这个是按位组加的哦。后面我会给出微软的几个官方链接,方便大家查阅!
                        return param;
                    }
                  }
             }

         2,如创建无标题的窗体或边框添加阴影等,这个在我的一些项目中需求还是非常大的。怎么办?

          无标题:把如上get{}部分改为:(这时要重载窗体的CreateParams哦)
          int WS_CAPTION = 0xC00000;
          int WS_BORDER = 0x800000;
          var param = base.CreateParams;
          param.Style &= ~WS_CAPTION | WS_BORDER;
          return param;

          阴影:把如上get{}部分改为:(这时要重载窗体的CreateParams哦)
          var param = base.CreateParams;
          param.ClassStyle |= 0x20000;
          return param;

          等等,其实,如果想改变窗体创建时默认样式(指通过公开属性无法修改的)那我们就可以重写窗体的这个属性了,同时在一些高级编程很多时候也需要用到Winform的功能重用问题,如只想要一个窗体(对象)的事件而不想看到它怎么办?其实base.Visible=false就可以了,这个时候,窗体的机制可以隐形操作一个对象来使用了。

         在net开发winform的过程中,我们有时需要对form窗体做一些特殊的设置,比如:

隐藏主窗体,只显示右下角的任务栏图标
上面的“隐藏主窗体”,有多种实现方式,但最为完美和彻底的方法,就是重写基类窗体的CreateParams事件,来实现。

扫描二维码关注公众号,回复: 1722958 查看本文章
protected override CreateParams CreateParams
        {
            get
            {
                base.Visible = false;
                return base.CreateParams;
            }
        }

再如

防止WinFrom切换闪屏问题时也可采用此种办法。

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




猜你喜欢

转载自blog.csdn.net/sl1990129/article/details/79279880