Duilib程序添加托盘图标显示

来源:赵克立博客 分类: C/C++ 标签:duilib发布时间:2017-10-26 15:34:01最后更新:2021-08-30 17:51:16浏览:5157
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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;
}

里面写的很清楚啦需要你自己设置一个图标导入资源里面就可以啦
如图:

image.png


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python