C# 實現打開窗口不獲取焦點

最近,在作一個tooltip窗口,鼠標移到某個控件上去,這個tooltip窗口就打開並顯示一些信息(有圖片和文字)。html

發現若是先tooltipWindow.show()而後再this.focus(),主窗體會有閃爍。api

網上搜了一下,發現有前輩說:this

  1. 建立窗口時去掉WS_VISIBLE屬性,加上WS_DISABLED屬性。.net

  2. 建立窗口,獲得窗口句柄。htm

  3. ::ShowWindow(m_hWnd,SW_SHOWNOACTIVATE)顯示窗口,則不會搶奪焦點。blog

  4. 更進一步,能夠屏蔽鼠標點擊時得到焦點的行爲,響應WM_MOUSEACTIVATE,返回MA_NOACTIVATE。圖片

可是也沒有給代碼。因此我本身試了試:ip

發現不須要用到第一步。也不知道是爲何。(個人tooltip不須要第4步)it

把tooltipWindow.Show()換成Win32.ShowWindow(tooltipWindow.Handle,SW_SHOWNOACTIVATE)就行了,也不用再使用this.Focus()。io

注:ShowWindow的實現和SW_SHOWNOACTIVATE的值本身搜索一下就行了

 

參考資料:http://www.cnblogs.com/cartler/p/4537719.html

 

----------------------------------咯咯咯-------------------------------

後來發現主窗體最小化後再還原,鼠標再移上去的時候就不顯示tooltip窗口了,應該是z軸順序的問題,可是我設了tooltip窗口的TopMost=true以後,主窗口仍是會閃爍。

我想要不要換個方式改變tooltip窗口的z軸順序,就找到了Winapi裏的SetWindowPos方法,試了一下,行了!

Win32.ShowWindow(tooltip.Handle,4);//4=SW_SHOWNOACTIVATE
Win32.SetWindowPos(tooltip.Handle, -1, MousePosition.X + 2, MousePosition.Y + 2, 0, 0, 1 | 0x10);

參考資料:

https://yq.aliyun.com/articles/53789

http://www.jb51.net/article/32718.htm

相關文章
相關標籤/搜索