一、定义系统托盘
//定义系统托盘///
m_tnid.cbSize=sizeof(NOTIFYICONDATA);//设置结构大小//
m_tnid.hWnd=this->m_hWnd;//设置图标对应的窗口
m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_INFO;//图标属性
m_tnid.uCallbackMessage=WM_NOTIFYICON;//应用程序定义的回调消息ID
设置NOTIFYICONDATA结构///
//CString szToolTip;
// szToolTip=_T("hhzw_wg1.0");
//_tcscpy(m_tnid.szTip, szToolTip);//帮助信息
m_tnid.uID=IDR_MAINFRAME;//应用程序图标
HICON hIconx;
hIconx=AfxGetApp()->LoadIcon(IDI_ICON1);
m_tnid.hIcon=hIconx;//图标句柄
m_tnid.dwInfoFlags=NIIF_INFO;
_tcscpy(m_tnid.szInfoTitle, _T(""));
_tcscpy(m_tnid.szInfo,_T(""));
m_tnid.uTimeout=1000;
::Shell_NotifyIcon(NIM_ADD, &m_tnid);//增加图标到系统盘
if(hIconx)::DestroyIcon(hIconx);
二、回调函数映射
ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)
三 、回调函数
HRESULT CHHZWWGDlg::OnNotifyIcon(WPARAM wParam,LPARAM lParam)
{
if(lParam==WM_LBUTTONDBLCLK)
{
//鼠标双击时主窗口出现
EnableWindow(TRUE);
ShowWindow(SW_SHOW);
SetForegroundWindow();
}
else if(lParam==WM_RBUTTONUP) //鼠标右键单击弹出选单
{
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint); //得到鼠标位置
CMenu menu;
menu.CreatePopupMenu(); //声明一个弹出式菜单
menu.AppendMenu(MF_STRING, IDC_Setting, _T("设置"));
menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭")); //增加菜单项"关闭",点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);//确定弹出式菜单的位置
SetForegroundWindow();
HMENU hmenu=menu.Detach(); //资源回收
menu.DestroyMenu();
delete lpoint;
}
if(wParam == WM_SHOWTIPS)
{
ShowTips((LPCTSTR)lParam);
}
return 0;
}
四、删除托盘
::Shell_NotifyIcon(NIM_DELETE,&m_tnid);