前不久,看到一个搞笑动画《右下角的战争》,有QQ、MSN、360、金山,瑞星等国内外几大工具软件的托盘图标参战,相互斗嘴,有意思!可见托盘是很火啊!
很多软件一启动就会在windows 右下角显示一个可爱图标,那个在软件界来说是托盘。托盘对软件的使用者来说,有很多好处,这理不列举。
托盘有时会显示一组功能菜单,方便让用户完成一些功能操作。
很多软件工程师,可能都碰到这样的情况,托盘菜单显示时,用MOUSE点其它地方托盘菜单不会消失!有些人提出用SetForegroundWidnow() API把原来窗口切换到前端,并获取焦点,来使托盘菜单消失。托盘菜单虽说是消失了,但是,不想显示的窗口却带到了前面,这可是用户不想要的。因此这个方法并不是最好的解决方案。
用MOUSE HOOK 可解完美解此问题。安装WH_MOUSE_DLL类型钩子的目的是拦截MOUSE点击事件。有MOUSE点击事件被拦截到时就向前安装钩子的窗口发自定义消息,在消息处理过程中处理托盘菜单的消失。需要注意是,如何让托盘菜单的消失还不能影响菜单功能的响应?这里有点技巧:消息处理过程中要延时200~300MS.然后再处理托盘菜单隐藏。
VC 实现MOSE HOOK细节请查找MSDN或相关技术资料!