MFC---系统托盘

来源:互联网 发布:extjs5 项目实例源码 编辑:程序博客网 时间:2024/05/17 23:10
系统托盘,是位于桌面右下角地方的一个小图标,常用的QQ等软件,在隐藏之后 就躲在那里。
 
 
创建菜单资源
 
 
 
 
Shell_NotifyIcon函数,向任务栏的状态栏发送一个消息
函数原型
BOOL Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA lpdata
);
 
 
 
在oninitdialog函数中写入加入系统脱盘的代码:
       
          nid.cbSize = sizeof(nid);     //大小赋值
 nid.hWnd = m_hWnd;           //父窗口
 nid.uID = IDR_MAINFRAME;     //icon  ID
 nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;   //托盘所拥有的状态
 nid.uCallbackMessage = UM_ICONNOTIFY;            //回调消息
 nid.hIcon = m_hIcon;                            //icon 变量
 CString str="PCRemote远程协助软件.........";       //气泡提示
 lstrcpyn(nid.szTip, (LPCSTR)str, sizeof(nid.szTip) / sizeof(nid.szTip[0]));
 Shell_NotifyIcon(NIM_ADD, &nid);   //显示托盘
 
 
stdafx.h文件中加入自定义消息的定义
     //自定义消息
enum
{
 UM_ICONNOTIFY= WM_USER+0x100,
};
 
 
 
 afx_msg void OnIconNotify(WPARAM wParam,LPARAM lParam);
 
 

cpp文件中写入代码:
       void CPCRemoteDlg::OnIconNotify(WPARAM wParam, LPARAM lParam)
{
 switch ((UINT)lParam)
 {
 case WM_LBUTTONDOWN: // click or dbclick left button on icon
 case WM_LBUTTONDBLCLK: // should show desktop
  if (!IsWindowVisible())
   ShowWindow(SW_SHOW);
  else
   ShowWindow(SW_HIDE);
  break;
 case WM_RBUTTONDOWN: // click right button, show menu
  CMenu menu;
  menu.LoadMenu(IDR_MENU_NOTIFY);
  CPoint point;
  GetCursorPos(&point);
  SetForegroundWindow();
  menu.GetSubMenu(0)->TrackPopupMenu(
   TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
   point.x, point.y, this, NULL);
  PostMessage(WM_USER, 0, 0);
  break;
 }
}

 

添加消息响应:
 //自定义消息
 ON_MESSAGE(UM_ICONNOTIFY, OnIconNotify)
 
 
在主窗口中退出时,系统托盘的图标没有退出
那么就要在主窗口的 WM_CLOSE 消息中添加,系统托盘退出的代码
 

void CPCRemoteDlg::OnClose()
{
 // TODO: Add your message handler code here and/or call default
 Shell_NotifyIcon(NIM_DELETE,&nid);

 
 CDialog::OnClose();
}


0 0