NOTIFYICONDATA nd;
nd.cbSize = sizeof (NOTIFYICONDATA);
nd.hWnd = m_hWnd;
nd.uID = IDI_UNLOCK; //图标资源名称
nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nd.uCallbackMessage = WM_NOTIFYICON;
nd.hIcon = m_hIcon;
CString str = _T("ZZZZ") ;//鼠标移动到图标时显示的名称
wcscpy(nd.szTip, str.GetBuffer());
Shell_NotifyIcon(NIM_ADD, &nd);//向任务栏的状态栏添加一个图标
ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)
LRESULT CXXXDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
// 响应在托盘图标上的单击
switch(lParam)
{
case WM_LBUTTONDOWN:
case WM_LBUTTONDBLCLK:
{
ShowWindow(SW_SHOWNORMAL);
}break ;
case WM_RBUTTONDOWN:
{
CMenu oMenu;
if (oMenu.LoadMenu(IDR_MENU1))
{
CMenu* pPopup = oMenu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CPoint oPoint;
if (IsWindowVisible())// 根据对话框窗口的显示/隐藏状态修改菜单名称
oMenu.ModifyMenu(ID_SHOW,MF_STRING,ID_SHOW,_T("隐藏"));
else
oMenu.ModifyMenu(ID_SHOW,MF_STRING,ID_SHOW,_T("显示"));
// 确定鼠标位置以便在该位置附近显示菜单
GetCursorPos( &oPoint );
SetForegroundWindow();
pPopup->TrackPopupMenu(
TPM_LEFTALIGN | TPM_RIGHTBUTTON,
oPoint.x, oPoint.y, this);
}
}break ;
}
return 0 ;
}
//删除托盘图标
BOOL CXXXDlg::OnQueryEndSession()
{
// TODO: 在此添加专用的查询结束会话代码
// 将图标从系统托盘中删除
NOTIFYICONDATA nc;//此结构体包含用来传递托盘消息的信息
nc.cbSize=sizeof(NOTIFYICONDATA);//结构体大小
//放置在托盘区的图标句柄
nc.hIcon=m_hIcon ;
nc.hWnd=m_hWnd;//窗体句柄
nc.uCallbackMessage=WM_NOTIFYICON;//托盘区域发生事件时触发本消息
//制定结构体中有效的属性(NIF_ICON,NIF_MESSAGE,NIF_TIP)
nc.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
nc.uID=IDI_UNLOCK;//托盘图标的标示符
Shell_NotifyIcon(NIM_DELETE,&nc);//向托盘区域发送消息,删除图标
return TRUE;
}
void CXXXDlg::OnClose()
{
OnQueryEndSession() ;
CDialog::OnClose();
}