最近,在作一個tooltip窗口,鼠標移到某個控件上去,這個tooltip窗口就打開並顯示一些信息(有圖片和文字)。html
發現若是先tooltipWindow.show()而後再this.focus(),主窗體會有閃爍。api
網上搜了一下,發現有前輩說:this
建立窗口時去掉WS_VISIBLE屬性,加上WS_DISABLED屬性。.net
建立窗口,獲得窗口句柄。htm
::ShowWindow(m_hWnd,SW_SHOWNOACTIVATE)顯示窗口,則不會搶奪焦點。blog
更進一步,能夠屏蔽鼠標點擊時得到焦點的行爲,響應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