系统托盘编程完全指南(3)
2010-07-25 20:46:52 来源:WEB开发网这个函数很容易理解,同时也够繁琐的,要把文本串载缓冲里拷来拷去。缺省的dwInfoFlags设置为NIIF_INFO,在文本旁边显示信息图标;其它可能的标志是NIIF_ERROR——表示出错,NIIF_WARNING——表示警告,NIIF_NONE——没有图标。有关修改后的CTrayIcon以及TrayTest3源代码请下载本文的例子。
只有一种方法可以显示气球提示(Shell_NotifyIcon),但终止的方法有多种。用户可以在气球上单击鼠标,也可以单击关闭按钮(在Windows 2000里没有关闭按钮,如图一),或者Windows用超时机制来终止气球提示。那么是如何知道所发生的事件是什么呢?每当创建托盘图标时,你可以提供一个HWND和消息ID来接收事件发生的通知。如果用户单击气球提示,Windows发送NIN_BALLOONUSERCLICK;如果超时或者单击关闭按钮,Windows则发送NIN_BALLOONTIMEOUT。就我所知,目前还没有办法区分是超时还是单击了关闭按钮。下表中列出的是所有与气球提示相关的通知消息:
通知消息 | 描述 |
NIN_BALLOONSHOW | 显示气球提示时发送 |
NIN_BALLOONHIDE | 气球提示消失时发送;例如,当图标被删除,如果因为超时或是用户单击鼠标气球消失,此消息不会被发送 |
NIN_BALLOONTIMEOUT | 当由于超时或者用户单击气球上的关闭按钮(X),使气球消失时发送此消息 |
NIN_BALLOONUSERCLICK | 当用户在气球提示上或托盘图标上单击鼠标(此时气球处于显示状态)时发送此消息 |
在测试过程中,我发现一个奇特的现象:在Windows XP中,只要你的托盘程序拥有焦点,气球提示便不会超时。显然,你只有转到其它应用程序,才能启动计时器。在Windows 2000里好像没有这个问题。
你可以用TrayTest3来看通知消息。实际上,TrayTest3的功能就是查看通知消息:当托盘通知消息到达时显示它们。查看的方法是先运行TrayTest3,单击初始对话框的"确认"按钮,然后双击托盘图标调出图一所示的窗口。用"查看|显示气球提示"菜单来让TrayTest3显示它的提示,然后当你关闭提示或等待超时的时候,你查看在主窗口中显示的什么通知消息。
最后时一点忠告:请不要滥用气球提示和托盘图标!很多程序员为了好玩和张扬个性而滥用托盘图标。请在只有真正需要它时才去做。不要让用户觉得你的程序很讨厌,这样他们会毫不犹豫地卸载这些屏幕垃圾。如果你真的必需实现托盘图标,至少要给用户一个选项来关掉它。(完)
本文配套源码
赞助商链接