很多时候我们需要在一个程序中显示不同的托盘图标,这就涉及了托盘图标的变换。
1.首先在对话框的构造函数中初始化两个图标句柄:
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_myicon1 = AfxGetApp()->LoadIcon(IDI_ICON1);
m_myicon2 = AfxGetApp()->LoadIcon(IDI_ICON2);
2.在初始化函数中初始化气泡信息
data.cbSize = sizeof(NOTIFYICONDATA);
data.hWnd=m_hWnd;
//data.uCallbackMessage=WM_ONTRAY;
//data.uFlags=NIF_MESSAGE|NIF_ICON;
data.uFlags=NIF_ICON | NIF_TIP | NIF_INFO;//NIF_MESSAGE|NIF_ICON|NIF_INFO;
data.dwInfoFlags=NIF_INFO;
strcpy(data.szTip,"Tip");
strcpy(data.szInfo,"Tip1");
strcpy(data.szInfoTitle,"Tip2");
data.uTimeout=1000;
data.hIcon=m_myicon1;
data.uID=IDR_MAINFRAME;
Shell_NotifyIcon(NIM_ADD,&data);
m_bChg=TRUE;
SetTimer(1,1,NULL);
3.在定时器中变换图标和气泡:
KillTimer(1);
//NOTIFYICONDATA data;
if(m_bChg)
{
data.hWnd=m_hWnd;
//data.uCallbackMessage=WM_ONTRAY;
data.uFlags=NIF_ICON | NIF_TIP | NIF_INFO;//NIF_MESSAGE|NIF_ICON|NIF_INFO;
data.dwInfoFlags=NIF_INFO;
strcpy(data.szTip,"gcy");
strcpy(data.szInfo,"gcy11");
strcpy(data.szInfoTitle,"gcy2");
data.uTimeout=1000;
data.hIcon=m_myicon2;
data.uID=IDR_MAINFRAME;
Shell_NotifyIcon(NIM_MODIFY,&data);
m_bChg=FALSE;
}
else
{
data.hWnd=m_hWnd;
//data.uCallbackMessage=WM_ONTRAY;
//data.uFlags=NIF_MESSAGE|NIF_ICON;
data.uFlags=NIF_ICON | NIF_TIP | NIF_INFO;//NIF_MESSAGE|NIF_ICON|NIF_INFO;
data.dwInfoFlags=NIF_INFO;
strcpy(data.szTip,"Tip3");
strcpy(data.szInfo,"Tip31");
strcpy(data.szInfoTitle,"Tip32");
data.uTimeout=1000;
data.hIcon=m_myicon1;
data.uID=IDR_MAINFRAME;
Shell_NotifyIcon(NIM_MODIFY,&data);
m_bChg=TRUE;
}
SetTimer(1,5000,NULL);