1. 程式人生 > >關於窗體(Windows Form)的CreateParams(屬性或引數)的一點總結

關於窗體(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;  
    }  
}