关于托盘的使用
2009年3月16日星期一
1、 托盘的创建
// 创建托盘
m_nd.cbSize = sizeof(m_nd);
m_nd.hWnd = AfxGetApp()->m_pMainWnd->GetSafeHwnd();
m_nd.uID = IDR_MAINFRAME;
m_nd.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
m_nd.uCallbackMessage = WM_NOTIFYICON;
m_nd.hIcon = m_hIcon;
_tcscpy_s(m_nd.szTip,sizeof(m_nd.szTip), _T("更新程序托盘"));
::Shell_NotifyIcon(NIM_ADD, &m_nd);
2、 托盘的退出
// 销毁托盘
::Shell_NotifyIcon(NIM_DELETE, &m_nd);
3、 托盘的气泡提示
// 托盘气泡提示
m_nd.cbSize = sizeof(m_nd);
m_nd.uFlags = NIF_INFO;
m_nd.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_nd.uTimeout = 10000;
m_nd.dwInfoFlags = NIIF_USER;
_tcscpy_s(m_nd.szInfo,sizeof(m_nd.szInfo),_T("Key驱动有最新更新!"));
_tcscpy_s(m_nd.szInfoTitle,sizeof(m_nd.szInfoTitle),_T("更新提示"));
::Shell_NotifyIcon(NIM_MODIFY,&m_nd);
4、 托盘的右键菜单
//鼠标右键单击弹出菜单
CMenu menu;
menu.LoadMenu(IDR_MENU_TRAY);
//载入事先定义的菜单
CMenu* pMenu=menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);
AfxGetMainWnd()->SetForegroundWindow();
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,
pos.x,pos.y,AfxGetMainWnd());
AfxGetMainWnd()->PostMessage(WM_NULL);
5、 托盘的点击气泡事件
if (lParam == NIN_BALLOONUSERCLICK) // 单击气泡事件