1. 程式人生 > >C#讓TopMost窗體彈出並置頂層但不獲取當前輸入焦點的終極辦法

C#讓TopMost窗體彈出並置頂層但不獲取當前輸入焦點的終極辦法

為了使程式在彈出視窗時置頂層且不獲取系統輸入焦點,避免影響使用者當前的操作,來電通來電彈屏軟體嘗試過N多種辦法,例如:彈出前儲存當前焦點視窗控制代碼,彈出時因為使用TopMost系統預設將焦點交給了彈出視窗,彈出後再將焦點還給彈出前的焦點視窗控制代碼(C#讓窗體置頂彈出但不獲取焦點)。這種方法貌似解決了問題,但是在彈出的時候還是會打斷使用者的部分操作。經過我們的不斷探索和嘗試,終於在Form底層取得了突破,效果很好,和qq的彈窗一樣不會打擾使用者操作。

//宣告常量:(釋義可參見windows API)

        const int WS_EX_NOACTIVATE = 0x08000000;

        //過載Form的CreateParams屬性,新增不獲取焦點屬性值。

        protected override CreateParams CreateParams

        {

            get

            {                

                CreateParams cp = base.CreateParams;

                cp.ExStyle |= WS_EX_NOACTIVATE;

                return cp;

            }

        }