Duilib程序添加托盘图标显示
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2021-08-30 17:51:16
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
功能描述
实现点击关闭后,程序最小化到托盘中并显示图标,单击图标销毁图标并且显示窗口,右键弹出菜单退出,点击退出关闭程序
功能实现
使用托盘图标需要引入头文件 #include <ShellAPI.h>
先在窗口类中头文件中定义下面代码
//定义托盘图标对象 NOTIFYICONDATA m_trayIcon; //添加托盘图标(初始化) void AddTrayIcon(); //处理托盘图标上的事件 LRESULT OnTrayIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
然后打开cpp文件定义实现
void MainWnd::AddTrayIcon() { memset(&m_trayIcon, 0, sizeof(NOTIFYICONDATA)); m_trayIcon.cbSize = sizeof(NOTIFYICONDATA); m_trayIcon.hIcon = ::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)); m_trayIcon.hWnd = m_hWnd; lstrcpy(m_trayIcon.szTip, _T("Msg")); m_trayIcon.uCallbackMessage = WM_SHOWTASK; m_trayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; Shell_NotifyIcon(NIM_ADD, &m_trayIcon); ShowWindow(SW_HIDE); } LRESULT MainWnd::OnTrayIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled) { //如果在图标中单击左键则还原 if (lParam == WM_LBUTTONDOWN) { //删除托盘图标 Shell_NotifyIcon(NIM_DELETE, &m_trayIcon); //显示主窗口 ShowWindow(SW_SHOWNORMAL); } //如果在图标中单击右键则弹出声明式菜单 if (lParam == WM_RBUTTONDOWN) { //获取鼠标坐标 POINT pt; GetCursorPos(&pt); //托盘菜单 win32程序使用的是HMENU,如果是MFC程序可以使用CMenu HMENU hMenu; //生成托盘菜单 hMenu = CreatePopupMenu(); //添加菜单,关键在于设置的一个标识符 WM_ONCLOSE 点击后会用到 AppendMenu(hMenu, MF_STRING, WM_ONCLOSE, _T("Exit")); //弹出菜单,并把用户所选菜单项的标识符返回 //右击后点别地可以清除,右击出来的菜单 SetForegroundWindow(m_hWnd); int cmd = TrackPopupMenu(hMenu, TPM_RETURNCMD, pt.x, pt.y, NULL, m_hWnd, NULL); PostMessage(m_hWnd, WM_NULL, 0, 0); //如果标识符是WM_ONCLOSE则关闭 if (cmd == WM_ONCLOSE) { m_trayIcon.hIcon = NULL; Shell_NotifyIcon(NIM_DELETE, &m_trayIcon); //退出程序 ::PostQuitMessage(0); } } bHandled = true; return 0; }
里面写的很清楚啦需要你自己设置一个图标导入资源里面就可以啦
如图: