标题：NOTIFYICONDATA
Shell_NotifyIcon 函数说明
函数格式
BOOL Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA lpdata);
参数说明
dwMessage为输入参数，传递发送的消息，表明要执行的操作。可选的值如下：
NIM_ADD
向托盘区域添加一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示这个图标，以便以后再次使用Shell_NotifyIcon对此图标操作。
NIM_DELETE
删除托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示需要被删除的这个图标。（说明，删除托盘区一般情况下指定hWnd和uID就可以了，但也有例外，当向托盘区添加完图标后，鼠标右击托盘图标，应用程序这时会弹出一个菜单，左键单击一个菜单项。假如应用程序弹出了一个对话框，好，把它关掉，这时再右键单击托盘区图标，在弹出的菜单中选择“退出”菜单,结果，程序退出了，而图标却还在那，如果这时把鼠标移到图标上，图标会立马消失。但这不是我们想要的结果。所以要想保证程序退出时托盘区图标消失，请添加如下语句：
NOTIFYICONDATA tnid; 
tnid.uFlags   =   NIF_ICON;
OK。这样就大功告成了。）
NIM_MODIFY
修改托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示需要被修改的这个图标。
NIM_SETFOCUS
Version 5.0. 设置焦点。比如当用户操作托盘图标弹出菜单，而有按下ESC键将菜单消除后，程序应该使用此消息来将焦点设置到托盘图标上。
NIM_SETVERSION
Version 5.0. 设置任务栏按照第二个参数lpdata指向的NOTIFYICONDATA结构体中的uVersion成员指定的版本号来工作。此消息可以允许用户设置是否使用基于Windows2000的version 5.0的风格。uVersion的缺省值为0，默认指明了使用原始Windows 95图标消息风格。具体这两者的区别请参考msdn中的Shell_NotifyIcon函数说明的Remarks。
lpdata为输入参数，是指向NOTIFYICONDATA结构体的指针，结构体内容用来配合第一个参数wMessage进行图标操作。
返回值
如果图标操作成功返回TRUE，否则返回FALSE。
如果dwMessage参数设为NIM_SETVERSION，则如果版本设置成功返回TRUE，如果设置的版本不支持返回FALSE。
NOTIFYICONDATA 结构体说明
包含系统需要的用来传递托盘区域消息的信息。
格式
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
TCHAR szTip[64];
DWORD dwState;
DWORD dwStateMask;
TCHAR szInfo[256];
union {
UINT uTimeout;
UINT uVersion;
};
TCHAR szInfoTitle[64];
DWORD dwInfoFlags;
GUID guidItem;
} NOTIFYICONDATA, *PNOTIFYICONDATA;
成员说明
cbSize
结构体的大小，以字节为单位。
hWnd
窗口的句柄。标示的窗口用来接收与托盘图标相关的消息。Shell_NotifyIcon函数调用时，hWnd和uID成员用来标示具体要操作的图标。
uID
应用程序定义的任务栏图标的标识符。Shell_NotifyIcon函数调用时，hWnd和uID成员用来标示具体要操作的图标。通过将多次调用，你可以使用不同的uID将多个图标关联到一个窗口hWnd。
uFlags
此成员表明具体哪些其他成员为合法数据（即哪些成员起作用）。此成员可以为以下值的组合：
NIF_ICON
hIcon成员起作用。
NIF_MESSAGE
uCallbackMessage成员起作用。
NIF_TIP
szTip成员起作用。
NIF_STATE
dwState和dwStateMask成员起作用。
NIF_INFO
使用气球提示代替普通的工具提示框。szInfo, uTimeout, szInfoTitle和dwInfoFlags成员起作用。
NIF_GUID
保留。
uCallbackMessage
应用程序定义的消息标示。当托盘图标区域发生鼠标事件或者使用键盘选择或激活图标时，系统将使用此标示向由hWnd成员标示的窗口发送消息。消息响应函数的wParam参数标示了消息事件发生的任务栏图标，lParam参数根据事件的不同，包含了鼠标或键盘的具体消息，例如当鼠标指针移过托盘图标时，lParam将为WM_MOUSEMOVE。
hIcon
增加、修改或删除的图标的句柄。注意，windows不同版本对于图标有不同要求。Windows XP可支持32位。
szTip
指向一个以\0结束的字符串的指针。字符串的内容为标准工具提示的信息。包含最后的\0字符，szTip最多含有64个字符。
对于Version 5.0 和以后版本，szTip最多含有128个字符（包含最后的\0字符）。
dwState
Version 5.0，图标的状态，有两个可选值，如下：
NIS_HIDDEN
图标隐藏
NIS_SHAREDICON
图标共享
dwStateMask
Version 5.0. 指明dwState成员的那些位可以被设置或者访问。比如设置此成员为NIS_HIDDEN，将导致只有hidden状态可以被获取。
szInfo
Version 5.0. 指向一个以\0结束的字符串的指针。字符串的内容为气球提示内容。最多含有255个字符。如果要移除已经存在的气球提示信息，设置uFlags成员为NIF_INFO，同时将szInfo设为空。
uTimeout
和uVersion成员为联合体。uTimeout表示气球提示超时的时间，单位为毫秒，此时间后气球提示将消失。系统默认气球提示的超时时间最小值为10秒，最大值为30秒。如果设置的uTimeout的值小于10将设置最小值，如果大于30将设置最大值。将超时时间分为最大最小两种，是因为解决不同图标的气球提示同时弹出的问题，详细内容请参考MSDN中NOTIFYICONDATA结构体说明的remarks。
uVersion
Version 5.0. 和uTimeout成员为联合体。用来设置使用Windows 95 还是 Windows 2000风格的图标消息接口。请参考Shell_NotifyIcon函数的说明获取更多信息。只有当使用Shell_NotifyIcon函数发送NIM_SETVERSION消息时，此成员才有作用。可选的值如下：
0
使用Windows 95风格。针对Windows 2000版本之前的windows设计的软件请使用此值。
NOTIFYICON_VERSION
使用Windows 2000风格。 针对Windows 2000版本以及以后版本的windows设计的软件请使用此值。
szInfoTitle
Version 5.0. 指向一个以\0结束的字符串的指针。字符串的内容为气球提示的标题。此标题出现在气球提示框的上部，最多含有63个字符。
dwInfoFlags
Version 5.0. 设置此成员用来给气球提示框增加一个图标。增加的图标出现在气球提示标题的左侧，注意如果szInfoTitle成员设为空字符串，则图标也不会显示。可选值如下：
NIIF_ERROR
错误图标。
NIIF_INFO
信息图标。
NIIF_NONE
没有图标。
NIIF_USER
使用用户使用hIcon成员指明的图标，要求Windows XP Service Pack 2 (SP2)或以后系统。
NIIF_WARNING
警告图标。
NIIF_ICON_MASK
Version 6.0. 保留。
NIIF_NOSOUND
Version 6.0. 禁止播放相应声音。
guidItem
Version 6.0. 保留。