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

相关文章
相关标签/搜索