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防火墙,先看头文件吧:
接下来就是实现文件:
本文介绍如何利用Shell_NotifyIcon函数在Windows系统任务栏创建自定义图标,详细解释了NOTIFYICONDATA结构及其应用示例。通过一个具体的ARP防火墙系统托盘程序,展示了如何根据不同状态切换图标并响应用户交互。
1001

被折叠的 条评论
为什么被折叠?



