1,自定义消息宏和NOTIFYICONDATA结构体
#define WM_NC (WM_USER+1001)
NOTIFYICONDATA NotifyIcon;
NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息、图标对应的窗口等内容。其定义为:
typedef struct _NOTIFYICONDATA {
DWORD
cbSize; //以字节为单位的这个结构的大小
HWND hWnd; //接收托盘图标通知消息的窗口句柄
UINT
uID; //应用程序定义的该图标的ID号
UINT
uFlags; //设置该图标的属性
UINT uCallbackMessage;//应用程序定义的消息ID号,此消息传递给hWnd
HICON
hIcon; //图标的句柄
char szTip[64];
//鼠标停留在图标上显示的提示信息
DWORD
dwState;
DWORD
dwStateMask;
TCHAR
szInfo[256];
union
{
UINTuTimeout;
UINT uVersion;
};
TCHAR szInfoTitle[64];
DWORD dwInfoFlags;
GUID guidItem;
} NOTIFYICONDATA,*PNOTIFYICONDATA;
该结构中,成员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位。
dwState
Version5.0,图标的状态,有两个可选值,如下:
NIS_HIDDEN
图标隐藏
NIS_SHAREDICON
图标共享
dwStateMask
uTimeout
和uVersion成员为联合体。uTimeout表示气球提示超时的时间,单位为毫秒,此时间后气球提示将消失。系统默认气球提示的超时时间最小值为10秒,最大值为30秒。如果设置的uTimeout的值小于10将设置最小值,如果大于30将设置最大值。将超时时间分为最大最小两种,是因为解决不同图标的气球提示同时弹出的问题,
uVersion
Version5.0.
和uTimeout成员为联合体。用来设置使用Windows95
还是 Windows 2000风格的图标消息接口。请参考Shell_NotifyIcon函数的说明获取更多信息。只有当使用Shell_NotifyIcon函数发送NIM_SETVERSION消息时,此成员才有作用。可选的值如下:
0
使用Windows95风格。针对Windows
2000版本之前的windows设计的软件请使用
此值。
NOTIFYICON_VERSION
使用Windows2000风格。
针对Windows 2000版本以及以后版本的windows设计的软件请使用此值。
szInfoTitle
Version5.0.
指向一个以\0结束的字符串的指针。字符串的内容为气球提示的标题。此标题出现在气球提示框的上部,最多含有63个字符。
dwInfoFlags
Version5.0.
设置此成员用来给气球提示框增加一个图标。增加的图标出现在气球提示标题的左侧,注意如果szInfoTitle成员设为空字符串,则图标也不会显示。可选值如下:
NIIF_ERROR
错误图标。
NIIF_INFO
信息图标。
NIIF_NONE
没有图标。
NIIF_USER
使用用户使用hIcon成员指明的图标,要求Windows
XP Service
Pack2 (SP2)或以后系统。
NIIF_WARNING
警告图标。
NIIF_ICON_MASK
Version 6.0. 保留。
NIIF_NOSOUND
Version 6.0. 禁止播放相应声音。
最小化窗口到托盘处实现函数:
void CMainFrame::MINHIDEWINDOW() //最小化到托盘处
{
NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); //托盘图标
NotifyIcon.hWnd=m_hWnd;
lstrcpy(NotifyIcon.szTip,_T("VC切分程序")); //提示信息
NotifyIcon.uCallbackMessage=WM_NC; //消息
NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&NotifyIcon); //绘制图标
ShowWindow(SW_HIDE);
}
托盘图标右键菜单实现:
//快捷菜单消息响应
void CMainFrame::OnNewMenu1()
{
ModifyStyleEx(0,WS_EX_TOPMOST); //窗口置顶
ShowWindow(SW_MAXIMIZE);
Shell_NotifyIcon(NIM_DELETE, &NotifyIcon); //删除托盘图标
}
退出
void CMainFrame::OnNewMenu2()
{
Shell_NotifyIcon(NIM_DELETE, &NotifyIcon); //删除托盘图标
CMainFrame::OnClose();
}