MFC程序隐藏托盘+右键关闭菜单
背景介绍:
我的程序是启动后,默认就隐藏到托盘中,等待http请求后,显示界面。所以最小化到托盘的代码,我是写在初始化里面。
正文:
一、自定义消息 WM_SHOWTASK
#define WM_SHOWTASK (WM_USER + 101)
二、在类向导中添加消息处理
点击【类向导】、【消息】、【自定义消息】,填写自定义的消息【WM_SHOWTASK】,点击【确定】,双击,自动生成类函数,编写代码。
三、最小化到托盘
// 编写最小化到托盘的代码,我是写在初始化函数中 NOTIFYICONDATA nid; nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); nid.hWnd = this->m_hWnd; nid.uID = IDI_MAINFRAME; // 资源,icon 图片 nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_SHOWTASK; // 绑定自定义的消息 nid.hIcon = m_hIcon; lstrcpy(nid.szTip, _T("web server")); Shell_NotifyIcon(NIM_ADD, &nid);
四、处理自定义消息,给托盘程序绑定右键菜单
afx_msg LRESULT CeloamDllDemoDlg::OnShowtask(WPARAM wParam, LPARAM lParam) { switch (lParam) { case WM_RBUTTONUP: // 只处理鼠标右键点击 { LPPOINT lpoint = new tagPOINT; ::GetCursorPos(lpoint); CMenu menu; menu.CreatePopupMenu(); menu.AppendMenuW(MF_STRING, WM_DESTROY, L"关闭"); menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x, lpoint->y, this); HMENU hmenu = menu.Detach(); menu.DestroyMenu(); delete lpoint; }break; } return 0; }