添加托盘功能

目的:实现托盘功能,即程序主窗口消失,在右下角托盘区添加程序托盘。对托盘图标进行鼠标操作(例如右击,单击,双击),就促发特定功能。
程序主窗口消失,添加程序托盘的函数:
void CXXXDlg::OnTray( )
{
NOTIFYICONDATA nid; 
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); 
nid.hWnd=this->m_hWnd; 
nid.uID=IDR_MAINFRAME;
//... notifyIconData.uID用于管理图标(日后修改或删除图标就靠他了,通常使用图标句柄对应的ID即可)
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; 
nid.uCallbackMessage=UM_SHOWTASK;     //自定义的消息名称,对托盘图标进行鼠标操作就会发送此消息。
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); 
//... notifyIconData.hIcon图标资源句柄,描述图标如何被绘制
strcpy(nid.szTip,"事例托盘图标");     //信息提示条为“事例托盘图标” 
Shell_NotifyIcon(NIM_ADD,&nid);  //在托盘区添加图标
ShowWindow(SW_HIDE);  //隐藏主窗口
}
假设UM_SHOWTASK的消息响应函数是LRESULT  OnShowTask(WPARAM wParam,LPARAM lParam)
函数实现为:
LRESULT CXXXDlg::OnShowTask(WPARAM wParam,LPARAM lParam) 
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为 

if(wParam!=IDR_MAINFRAME) 
return 1; 
switch(lParam) 

case WM_RBUTTONUP:// 右键起来时弹出快捷菜单

NOTIFYICONDATA nid; 
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); 
nid.hWnd=this->m_hWnd; 
nid.uID=IDR_MAINFRAME;
  CMenu pMenu;
  pMenu.LoadMenu(IDR_MENU1);      //加载菜单
  CMenu* pPopup = pMenu.GetSubMenu(0);
  ::SetMenuDefaultItem(pPopup->m_hMenu,0,TRUE); 
 CPoint mouse; 
 GetCursorPos(&mouse);         
    ::SetForegroundWindow(nid.hWnd);           
    ::TrackPopupMenu(pPopup->m_hMenu,0,mouse.x,mouse.y,0,nid.hWnd,NULL); 
break;

case WM_LBUTTONDBLCLK ://双击左键显示主窗口并删除托盘

this->ShowWindow(SW_SHOW );//显示主窗口
NOTIFYICONDATA nc;   //删除托盘图标
nc.cbSize = sizeof(NOTIFYICONDATA); 
nc.hWnd = m_hWnd; 
nc.uID = IDR_MAINFRAME; 
Shell_NotifyIcon(NIM_DELETE, &nc); 
break;


return 0; 
}

你可能感兴趣的:(职场,休闲,托盘)