托盘图标(NotifyIcon)详解

Windows xp下的托盘功能实现起来很简单,但如果要做一些高级一点的实现效果,以及良好的UI友好操作,那就需要下一小番功夫了。这里没有采用自己创建Tip窗口的方式,而是使用windows自带的Shell_NotifyIcon来完成一些还算Ok的效果。

托盘中我们经常要显示提示,NOTIFYICONDATA中给了我们相应的参数。个人建议使用InfoTip。而不要采用最简单的Tip。首先是InfoTip美观,其次InfoTip灵活,可以设置提示的标题和提示的内容,且内容允许多行。那么如果我们要实现一个标准的托盘加InfoTip提示功能,并具有良好的交互性,就需要封装一下NotifyIcon,使其具一些标准功能。

  1. 允许设定鼠标停留在托盘上显示提示的延时,这个延时即鼠标停留在托盘上多久才显示托盘。
  2. 在提示显示时,能动态更新提示内容。
  3. 点击提示窗口或者提示关闭按钮后关闭提示。
  4. 在设置鼠标离开托盘图盘后多长时间提示关闭。
  5. 当鼠标右击托盘时能弹出菜单。如果托盘上已经显示提示,右击托盘弹出菜单时,应该能隐藏或者关闭提示。

如果以上功能能得到良好实现,那么算是一个标准的托盘功能。本文将介绍使用Shell_NotifyIcon函数,来实现以上功能的方法。

由于源代码不在旁边,这边把主要思路和需要注意的地方说一下。

 

首先创建一个托盘我们使用Shell_NotiryIcon( NM_ADD, &ni );其中ni中我们使用NIF_INFO.具体如何使用气泡提示,从MSDN中我们可以查找。

如果我们想要在气泡弹出的时间段内动态的更新气泡提示的内容,那么我们需要使用Shell_NotifyIcon( NIM_MODIFY, &ni );去修改提示的内容。

虽然气泡提起会自己消失,但微软使其延迟消失时间规定为最少是10秒(好像)。所以如果我们想动态设置延迟消失时间,需要我们自己来实现。具体的方法可以使自己创建一个时间线程或者其他能不断被调用的函数,在函数中检测超时,时间到了就使用Shell_NotifyIcon( NIM_MODIFY, &ni );隐藏提示。方法就是去掉NIF_INFO这个格式即可。

另外还会涉及一些其他细节,当我们右击托盘的时候,提示应该消失,因为不消失会使得菜单和气泡重叠,不够美观。具体方法因人而异。

还有需要处理一些和气泡相关的消息,我们应该实现,点击气泡提示,气泡提示会隐藏,这个我们就需要处理NIN_BALLOONUSERCLICK消息。

这里有一个很需要注意的地方是,使用Shell_notifyIcon( NIM_MODIFY, &ni );时,托盘会发出NIN_TIMEOUT消息,但是如果你想实现点击气泡上关闭按钮关闭气泡时,你也需要处理NIN_TIMEOUT消息,这样的话,我们需要定义一个变量,每调用一次Shell_NotifyIcon( NIM_MODIFY, &ni );的时候都设置一次,表明当前NIN_TIMEOUT消息是由于Shell_Notify引起的,那么就不处理NIN_TIMEOUT,如果此变量没被设置,证明用户点击了气泡提示的关闭按钮。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值