C#讓TopMost窗體彈出並置頂層但不獲取當前輸入焦點的終極辦法
阿新 • • 發佈:2019-01-28
為了使程式在彈出視窗時置頂層且不獲取系統輸入焦點,避免影響使用者當前的操作,來電通來電彈屏軟體嘗試過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; } }