工控编程吧

标题: 7.上位机VC MFC任务栏托盘弹出菜单的实现 [打印本页]

作者: qq263946146    时间: 2015-11-7 21:38
标题: 7.上位机VC MFC任务栏托盘弹出菜单的实现
托盘弹出菜单的实现

功能展示
•在我们使用360,QQ等软件时,系统的任务栏中会显示一个托盘图标,用户鼠标右键时,就会弹出一个快捷菜单,进行常用功能的操作。当前实例就实现了这一功能,效果如图

(, 下载次数: 3)
要点提示

设计任务栏的托盘菜单,关键一点是使用函数Shell_NotifyIcon()
Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid)
dwMessage可为NIM_ADD添加图标到任务栏. 从任务栏删除一个图标.  NIM_MODIFY 修改任务栏的一个图标;
MIN_DELETE从任务栏删除一个图标
pnid 结构体参数有
cbSize 确定结构体大小.
hWnd 接收任务菜单的窗口句柄.
uID 任务样图标ID.
uFlags 指定结构体中要使用的成员:
uCallbackMessage 应用程序自定义消息标识符. 系统会发送该消息到hWnd 的窗口中;
hIcon菜单的图标句柄
szTip是提示文本;
我们只要使用这一函数便可实现托盘弹出菜单的功能

实现功能

•1.新建一个对话框应用程序

•2.添加一结构体变量NOTIFYICONDATA m_traydata;并初始化

•  m_traydata.cbSize = sizeof(NOTIFYICONDATA);

•  m_traydata.hIcon =AfxGetApp()->LoadIcon(IDI_TRAYICON);

•  m_traydata.hWnd = m_hWnd;

•  char *m_str = "系统管理";

•  strncpy(m_traydata.szTip,m_str,strlen(m_str)+1);//strlen+1表示将空字符拷贝到目标字符串中

•  m_traydata.uCallbackMessage = WM_TRARMESSAGE;

•  m_traydata.uFlags =NIF_ICON|NIF_MESSAGE|NIF_TIP;

•在对话框的ONsysCommand中判断用户是否单击了最小化按钮,是则实现托盘菜单的加载

•voidCTrayPopMenuDlg::OnSysCommand(UINT nID, LPARAM lParam)

•{if((nID & 0xFFF0) == IDM_ABOUTBOX)

•  {CAboutDlg dlgAbout; dlgAbout.DoModal();

•  } else if ((nID & 0xFFF0) == SC_MINIMIZE )

•  {ShowWindow(SW_HIDE);Shell_NotifyIcon(NIM_ADD,&m_traydata);}

•  else

•  {CDialog::OnSysCommand(nID, lParam);

•  }

•}

•再实现对自定义消息的处理

•voidCTrayPopMenuDlg::OnTrayMessage(WPARAM wParam, LPARAM lParam)

•{if(lParam == WM_LBUTTONDOWN)

•  {ShowWindow(SW_RESTORE);}

•  else if (lParam == WM_RBUTTONDOWN)

•  {CPoint m_point; ::GetCursorPos(&m_point);CIconMenu* m_submenu = (CIconMenu*)m_menu.GetSubMenu(0);

•m_submenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,m_point.x,m_point.y,AfxGetApp()->m_pMainWnd,TPM_LEFTALIGN);

•  }

•}
•最后在程序能出时,对托盘菜单进行清除

•voidCGkbc8Dlg::OnExit()

•{:Add your command handler code here

•  if(MessageBox("确定要退出吗?","系统提示",MB_OKCANCEL|MB_ICONQUESTION)!=IDOK)

•  return;

•  //添加系统托盘

•  Shell_NotifyIcon(NIM_DELETE,&m_traydata);

•  CDialog::OnCancel();

•}

•下面我们结合编程软件演示托盘菜单的实现过程
[iqiyi]http://player.video.qiyi.com/cf8e05b85300107bb6d88540d8f8ec22/0/0/w_19rt8n3w6x.swf-albumId=4845898709-tvId=4845898709-isPurchase=0-cnId=12[/iqiyi]
源码及视频教程下载(仅电脑上可见):
(, 下载次数: 0)
[note]1[/note]






欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4