Shell_NotifyIcon函数用于向Windows系统任务栏的状态区域发送消息,原型如下:
其中
(1)参数dwMessage表示该函数要执行的操作,取值如下:
NIM_ADD:往状态区添加一个图标;在参数lpdata指向的结构中的参数uID或guidItem给这个图标指定了标识;
NIM_MODIFY:修改状态区的一个图标;使用的是NIM_ADD中指定的图标标识;
NIM_DELETE:删除状态区的一个图标;使用的是NIM_ADD中指定的图标标识;
NIM_SETFOCUS:将焦点重新设给任务栏的通知区域;一般通知区域的图标在完成UI操作时使用该函数来重新获取焦点,例如通知区域的图标显示一个快捷菜单,但用户按ESC键取消该菜单的显示时,图标就可以使用NIM_SETFOCUS来重新使通知区域获得焦点;
NIM_SETVERSION:指示通知区域要遵循参数lpdata指向的结构中的参数uVersion指定的版本来操作,版本号指定了哪些成员是可识别的。
(2)参数lpdata是指向NOTIFYICONDATA结构的指针,该结构的内容取决于参数dwMessage的值,例如可以定义一个图标用于添加到通知区域,以用来显示通知;也可以指定一个用于修改或删除的图标。
返回值:
成功返回TRUE,失败返回FALSE;当dwMessage设置为MIN_SETVERSION时,该函数返回TRUE表示版本号更改成功,返回FALSE表示系统不支持指定的版本。
注意:对于Windows 2000(Shell32.dll version 5.0),Shell_NotifyIcon对于鼠标和键盘事件的处理与早期的操作系统的不同点在于:
(1)用户使用键盘选择了通知图标的快捷菜单,Shell将发送WM_CONTEXTMENU消息给图标对应的应用程序,而早期操作系统则发送WM_RBUTTONDOWN和WM_RBUTTONUP消息;
(2)用户使用键盘选择通知图标,并使用空格键或Enter键激活它,则Shell将发送NIN_KEYSELECT通知给应用程序,而早期版本则发送WM_RBUTTONDOWN和WM_RBUTTONUP消息;
(3)用户使用鼠标选择通知图标,并使用Enter键激活它,Shell将发送NIN_SELECT通知给应用程序,而早期版本发送WM_RBUTTONDOWN和WM_RBUTTONUP消息;
对于Windows XP(Shell32.dll version 6.0),当用户将鼠标指向关联着气泡通知的图标时,Shell将发送下列消息:
(1)NIN_BALLOONSHOW:当气泡显示时发送(气泡在队列中排队);
(2)NIN_BALLOONHIDE:当气泡消失时发送,例如,当图标删除时。在气泡因为超时或者用户鼠标单击后消失时,不发送该消息;
(3)NIN_BALLOONTIMEOUT:气泡超时后消失时发送;
(4)NIN_BALLOONUSERCLICK:用户鼠标单击气泡使气泡消失时发送;
结构NOTIFYICONDATA包含了Windows系统在通知区域显示通知所需的信息,本函数Shell_NotifyIcon使用,原型如下:
上面两个函数使用的实例当然是在编写系统托盘程序时,下面这个类摘自金山开源作品之ARP防火墙,先看头文件吧:
接下来就是实现文件: