MFC 最小化到托盘及右击托盘菜单
2016-01-21 22:30
211 查看
//全局变量 NOTIFYICONDATA nid;//托盘图标全局变量
//在stdafx.h #define WM_SHOWTASK (WM_USER + 123) // 关联消息映射函数 // 位于BEGIN_MESSAGE_MAP与END_MESSAGE_MAP之间 ON_MESSAGE(WM_SHOWTASK,OnShowTask) // 当然要声明和定义OnShowTask() // 在CtestDlg类中声明 LRESULT OnShowTask(WPARAM wParam, LPARAM lParam) ;
void CtestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if (nID == SC_MINIMIZE) // 最小化窗口 { nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); nid.hWnd = this->m_hWnd; nid.uID = IDR_MAINFRAME; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称 nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); lstrcpy(nid.szTip, _T("Getpost Domain")); // 信息提示条 Shell_NotifyIcon(NIM_ADD, &nid); // 在托盘区添加图标 ShowWindow(SW_HIDE); // 隐藏主窗口 return; } if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } }
LRESULT CtestDlg::OnShowTask(WPARAM wParam, LPARAM lParam) //wParam接收的是图标的ID,lParam接收的是鼠标的动作----最小化到托盘 { if (wParam != IDR_MAINFRAME) return 1; if (WM_LBUTTONDBLCLK == lParam) { this->ShowWindow(SW_SHOWNORMAL); this->SetForegroundWindow(); Shell_NotifyIcon(NIM_DELETE, &nid); // 托盘图标不显示 } if (lParam == WM_RBUTTONDOWN) { //右击弹出托盘菜单 CMenu menu; menu.LoadMenu(IDR_MENU2);//首先建立菜单项IDR_MENU2 CMenu *pPopUp = menu.GetSubMenu(0); CPoint pt; GetCursorPos(&pt); SetForegroundWindow(); pPopUp->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this); PostMessage(WM_NULL, 0, 0); } return 0; }以上代码在VS2015中测试通过!
相关文章推荐
- SmartImageView
- Add a Syscall
- select/poll/epoll on serial port
- Android Studio导入项目非常慢的解决办法
- JavaScript之函数和this
- 排序—基数排序(js实现)
- 并查集+欧拉回路
- Generate Ubuntu Install Media On Mac
- 遥望布达拉——DAY14 左贡-邦达
- Cordys BOP租户使用中常见疑问——租户对接口进行授权
- 动态规划-三角形
- C语言结构体
- Tomcat设置IP,实现局域网内机器访问
- 【转】细说new与malloc的10点区别
- Bare Medal on BCM2835 and BCM2836
- 第十篇 javascript基础语法
- java简单数据类型
- leetcode--Unique Paths && Unique Paths ii
- centos下的lnmp环境搭建
- UVA 1608 Non-boring sequences (递归分治)