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


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

 1 //聲明常量:(釋義可參見windows API)  
 2   
 3         const int WS_EX_NOACTIVATE = 0x08000000;  
 4   
 5         //重載Form的CreateParams屬性,添加不獲取焦點屬性值。  
 6   
 7         protected override CreateParams CreateParams  
 8   
 9         {  
10   
11             get  
12   
13             {                  
14   
15                 CreateParams cp = base.CreateParams;  
16   
17                 cp.ExStyle |= WS_EX_NOACTIVATE;  
18   
19                 return cp;  
20   
21             }  
22   
23         }  

 


免責聲明!

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



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