我们如果使用过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事件,来实现。
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; } }