C# CreateParams的使用(解決閃屏問題)


 <轉載自:https://blog.csdn.net/xpwang/article/details/53427479>

  窗體和控件的屬性CreateParams(這真的是一個屬性)很神奇,因為通過它你能夠很方便的控制窗體或控件諸如邊框、最大化最小化關閉按鈕的隱藏、窗體的模式化彈窗模式等的一些特性。雖然,CreateParams有者如此巨大的潛力,但是在使用時要相當慎重,如果你不了解CreateParams這個屬性的話,反而會是你在編寫其他代碼的時候非常疑惑。

  引用MSDN中對CreateParams的說明:  

  在你開發的重載控件中不要重寫這個屬性,通過這個屬性控制控件的某些風格。只有在你封裝Windows控件或者想實現某些WinForm沒有提供的風格(比如Layered Window)控制的時候再使用這個屬性。更多信息請參照MSDN上對CreateWindow方法和CreateWindowEx方法的參數CREATESTRUCT結構體的文檔注釋 。

  簡述為何CreateParams能夠實現這樣高級的樣式控制,因為從CreateWindow和CreateWindowEx的名字就可以看出,CreateParam是傳遞給這倆個方法的參數,而這兩個方法又是在窗體創建的時候調用的。所以,CreateParam才能夠實現如此強大的樣式控制。

  在net開發winform的過程中,我們有時需要對form窗體做一些特殊的設置,比如:
    隱藏主窗體,只顯示右下角的任務欄圖標
    上面的“隱藏主窗體”,有多種實現方式,但最為完美和徹底的方法,就是重寫基類窗體的CreateParams事件,來實現。

        protected override CreateParams CreateParams
        {
            get
            {
                base.Visible = false;
                return base.CreateParams;
            }
        }

上面的代碼,就是實現方式,非常簡單有效,調試運行,不會看到一個窗體(因為窗體的Visible可視屬性設置成了false,即窗體不可見)。但是,窗體的事件Form_Load, Form_Shown, Form_Paint 等是依舊可以使用的。

再如:

  防止WinFrom切換閃屏問題時也可采用此種辦法。 

   添加以下代碼:

 

         // 防止閃屏  
        protected override CreateParams CreateParams  
        {  
            get  
            {  
                CreateParams cp = base.CreateParams;  
                cp.ExStyle |= 0x02000000;  
                return cp;  
            }  
        }  

 

-------------------------------------------------------------------------------------------------

我使用此方法解決了閃屏問題。剛開始是我是在每一個窗體中添加此代碼,但是后來發現其實他們引用的都是重寫后的相同的類:CreateParams,所以只需在主界面的后台代碼中寫下這段代碼,即在程序運行初始該方法已經重寫,其他的界面就無需再重寫這段代碼了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM