基于Duilib的win32程序实现最小化到托盘

最近在学习使用Duilib,这个库实现PC程序的界面确实很方便。Duilib中的demo程序全是点击关闭按钮程序就关闭了,所以这里我实现了一个点击关闭按钮后程序最小化到托盘的效果。以及常规的,鼠标左键点击托盘里的程序图标后程序正常显示。右键点击后出现退出菜单,点击退出按钮后程序正常退出。 下面是关键部分源码:

  • 包含头文件和自定义消息
#include <ShellAPI.h>
#define WM_SHOWTASK WM_USER+101 
#define WM_ONCLOSE WM_USER+102
复制代码
  • 处理关闭按钮点击事件,增加最小化到托盘功能
	memset(&m_nid,0,sizeof(NOTIFYICONDATA));
	m_nid.cbSize = sizeof(NOTIFYICONDATA);
	m_nid.hIcon = ::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_SMALL));
	m_nid.hWnd = m_hWnd;
	lstrcpy(m_nid.szTip, _T("Duilib程序"));
	m_nid.uCallbackMessage = WM_SHOWTASK;
	m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	Shell_NotifyIcon(NIM_ADD, &m_nid);
	ShowWindow(SW_HIDE);
复制代码
  • 自定义HandleCustomMessage或HandleMessage处理鼠标点击托盘图标的响应
    //如果在图标中单击左键则还原
	if( lParam == WM_LBUTTONDOWN )
	{             
		Shell_NotifyIcon(NIM_DELETE, &m_nid);//删除托盘图标
		ShowWindow(SW_SHOWNORMAL);//显示主窗口
	}
	//如果在图标中单击右键则弹出声明式菜单
	if( lParam == WM_RBUTTONDOWN )
	{             
		//获取鼠标坐标  
		POINT pt; GetCursorPos(&pt);  
		SetForegroundWindow(m_hWnd); //右击后点别地可以清除“右击出来的菜单”

		HMENU hMenu; //托盘菜单    win32程序使用的是HMENU,如果是MFC程序可以使用CMenu
		hMenu = CreatePopupMenu();//生成托盘菜单   
		AppendMenu(hMenu, MF_STRING, WM_ONCLOSE, _T("退出"));  

		int cmd = TrackPopupMenu(hMenu, TPM_RETURNCMD, pt.x, pt.y, NULL, m_hWnd,  NULL);  
		if(cmd == WM_ONCLOSE)   
		{
			//退出程序
			m_nid.hIcon = NULL;
			Shell_NotifyIcon(NIM_DELETE, &m_nid);
			::PostQuitMessage(0);
		}
	}
复制代码

转载于:https://juejin.im/post/5a37858cf265da4310487aa1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值