VC下添加和删除自己系统托盘图标,及托盘事件的响应

来源:互联网 发布:mac word 简繁体转换 编辑:程序博客网 时间:2024/04/30 04:36
添加和删除系统托盘图标:
  1. //需要添加一个成员变量
  2. NOTIFYICONDATA m_nd; //NOTIFYICONDATA结构
  3.  
  4. /***************************************
  5.  * 将图标加入系统托盘
  6.  * 参数:
  7.  * hWnd - 窗体句柄
  8.  * hIcon  - 所要加入的图标句柄
  9.  * title     - 悬停于系统托盘之上时所要显示的消息
  10.  * uCallbackMessage - 消息标识(需用户自己定义消息)
  11.  ***************************************/
  12. void CMyDlg::AddIcon(HWND hWnd, HICON hIcon, UINT uCallbackMessage, char *title)
  13. {
  14.         m_nd.cbSize = sizeof(NOTIFYICONDATA);
  15.         m_nd.hWnd = hWnd;
  16.         m_nd.uID = IDR_MAINFRAME;
  17.         m_nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
  18.         m_nd.uCallbackMessage = uCallbackMessage;
  19.         m_nd.hIcon = hIcon;
  20.         strcpy(m_nd.szTip, title);
  21.         Shell_NotifyIcon(NIM_ADD, &m_nd);       //加入图标
  22. }
  23.  
  24. //删除系统托盘图标
  25. void CMyDlg::RemoveIcon()
  26. {
  27.         Shell_NotifyIcon(NIM_DELETE, &m_nd);
  28. }

下面就是为图标添加自己的响应消息:

  1. //用户定义的消息(在相应头文件中加入)
  2. #define MYWM_NOTIFYICON WM_USER+1
  3.  
  4. //添加WinProc消息函数
  5. LRESULT CMyCatchScreenDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  6. {
  7.  // TODO: Add your specialized code here and/or call the base class
  8.  switch(message)
  9.  {
  10.   case MYWM_NOTIFYICON:
  11.    //如果是用户定义的消息
  12.    if(lParam==WM_LBUTTONDOWN)
  13.    {
  14.     //添加自己的函数
  15.    
  16.     //鼠标单击图标时主窗口出现
  17.     //ShowMyWindow();
  18.    }
  19.    else if(lParam==WM_RBUTTONDOWN)
  20.    {
  21.     //添加自己的函数
  22.    
  23.     //鼠标右键单击弹出选单
  24.     /*
  25.     CMenu menu;
  26.     menu.LoadMenu(IDR_MY_MENU); //载入事先定义的选单
  27.     CMenu*pMenu=menu.GetSubMenu(0);
  28.     CPoint pos;
  29.     GetCursorPos(&pos);
  30.     pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd());
  31.     */
  32.    }
  33.   break;
  34.  }
  35.  return CDialog::WindowProc(message, wParam, lParam);
  36. }

调用演示:

  1. void CMyDlg::ShowMyWindow()
  2. {
  3.         RemoveIcon();   //删除系统图标
  4.         ShowWindow(SW_SHOW);    //显示窗口
  5. }
  6.  
  7. void CMyDlg::HideMyWindow()
  8. {
  9.         ShowWindow(SW_HIDE);    //隐藏窗口
  10.         AddIcon(m_hWnd,m_hIcon,MYWM_NOTIFYICON,"MyDlg");        //添加系统图标
  11. }