MFC下托盘图标的实现和托盘菜单
2016-07-14 17:01
323 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">文章来源:http://blog.sina.com.cn/s/blog_4a6151550100lqk0.html</span>
对话框头文件XXXDlg.h:
1.添加成员变量
NOTIFYICONDATA m_nid;2.添加tray消息响应函数的声明
afx_msg LRESULT OnTrayNotify(WPARAM wParam, LPARAM lParam);对话框实现文件XXXDlg.cpp:
1.定义tray消息
#define UM_TRAYNOTIFY WM_USER + 11
2.CXXXDlg的构造函数添加
memset(&m_nid, 0, sizeof(m_nid)); // Initialize NOTIFYICONDATA struct m_nid.cbSize = sizeof(m_nid); m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;3.CXXXDlg的析构函数添加
m_nid.hIcon = NULL; Shell_NotifyIcon(NIM_DELETE, &m_nid);4.添加消息映射:
BEGIN_MESSAGE_MAP(CMFC2Dlg, CDialog) //... ON_MESSAGE(UM_TRAYNOTIFY, &CMFC2Dlg::OnTrayNotify) //... END_MESSAGE_MAP()
5.OnInitDialog函数添加:
m_nid.hWnd = GetSafeHwnd(); m_nid.uCallbackMessage = UM_TRAYNOTIFY; // Set tray icon and tooltip m_nid.hIcon = m_hIcon; // Set tray notification tip information CString strToolTip = _T("托盘程序"); _tcsncpy_s(m_nid.szTip, strToolTip, strToolTip.GetLength()); Shell_NotifyIcon(NIM_ADD, &m_nid);
6.OnTrayNotify函数的实现:
LRESULT CXXXDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam) { UINT uMsg = (UINT)lParam; switch(uMsg) { case WM_RBUTTONUP: { //右键处理 CMenu menuTray; CPoint point; int id; GetCursorPos(&point); menuTray.LoadMenu(IDR_MENU_TRAY); id = menuTray.GetSubMenu(0)->TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this); #if 0 CString strInfo; strInfo.Format(L"menuid %d", id); LPCTSTR strtmp; strtmp = strInfo.GetBuffer(0); MessageBox(strtmp, L"test"); #endif switch(id){ case IDR_TRAY_EXIT: OnOK(); break; case IDR_TRAY_RESTORE: //窗口前端显示 SetForegroundWindow(); ShowWindow(SW_SHOWNORMAL); break; default: break; } break; } case WM_LBUTTONDBLCLK: SetForegroundWindow(); ShowWindow(SW_SHOWNORMAL); break; default: break; } return 0; }7.添加WM_SIZE消息处理:
void CMFC2Dlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if(nType == SIZE_MINIMIZED){ ShowWindow(SW_HIDE); } }8.菜单
添加菜单资源 , 比如IDR_MENU_TRAY.
定义一个子菜单Tray,有若干个菜单项,比如“恢复窗口”, ID是IDR_TRAY_RESTORE,“退出”, ID是IDR_TRAY_EXIT。
在OnTrayNotify函数中捕获右击消息,弹出菜单,参考第6步。
至此,添加托盘的功能基本完成。
相关文章推荐
- sqoop常见问题
- UIScrollView 探究
- tomcat+maven远程部署
- Windows无法连接到System event notification service服务
- 微软源代码管理工具TFS2013安装与使用图文教程
- AWS-GO-SDK NOTES
- 腾讯最赚钱的部门是怎么做运维的?___转载
- 【Android】使用v7.widget.GridLayout做九宫格。
- 深入了解viewport和px
- node.js系列(实例):原生node.js实现接收前台post请求提交数据
- PAT-乙级-1043. 输出PATest(20)
- linux (centos) 单机50w+链接 内核参数配置
- Oracle策略的使用(dbms_rls.add_policy)
- Maven3路程 用Maven创建第一个web项目(1)
- 哈夫曼编码(Huffman)Java实现代码
- Java线程池框架核心代码解析
- poj 3107(树形dp)
- WordPress添加AJAX文章点赞功能
- Golang 通关初级(2)
- Java基础String类