MFC 最小化到托盘及右击托盘菜单

来源:互联网 发布:red seal牙膏 知乎 编辑:程序博客网 时间:2024/05/16 10:28
//全局变量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_MENU2CMenu *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中测试通过!
0 0
原创粉丝点击