關於窗體(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事件,來實現。
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;
}
}