Duilib程序添加托盘图标显示
转载:https://www.zhaokeli.com/article/8266.html
温馨提示:技术类文章有它的时效性,请留意文章更新时间以及软件的版本
功能描述
实现点击关闭后,程序最小化到托盘中并显示图标,单击图标销毁图标并且显示窗口,右键弹出菜单退出,点击退出关闭程序
功能实现
使用托盘图标需要引入头文件 #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, , 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);
         //右击后点别地可以清除“右击出来的菜单”
         SetForegroundWindow(m_hWnd);
         //托盘菜单    win32程序使用的是HMENU,如果是MFC程序可以使用CMenu
         HMENU hMenu;
         //生成托盘菜单
         hMenu = CreatePopupMenu();
         //添加菜单,关键在于设置的一个标识符  WM_ONCLOSE 点击后会用到
         AppendMenu(hMenu, MF_STRING, WM_ONCLOSE, _T("Exit"));
         //弹出菜单,并把用户所选菜单项的标识符返回
         int cmd = TrackPopupMenu(hMenu, TPM_RETURNCMD, pt.x, pt.y, NULL, m_hWnd, NULL);
         //如果标识符是WM_ONCLOSE则关闭
         if (cmd == WM_ONCLOSE)
         {
             m_trayIcon.hIcon = NULL;
             Shell_NotifyIcon(NIM_DELETE, &m_trayIcon);
             //退出程序
             ::PostQuitMessage();
         }
     }
     bHandled = true;
     return ;
 }
里面写的很清楚啦需要你自己设置一个图标导入资源里面就可以啦
如图:

在Notify函数中应将
if(msg.spender == m_pCloseBtn)
{
PostQuitMessage(0);
return;
}
替换为
if(msg.spender == m_pCloseBtn)
{
::ShowWindow(m_hWnd,SW_HIDE);
return;
}
Duilib程序添加托盘图标显示的更多相关文章
- MFC为应用程序添加托盘(右键托盘,弹出菜单)
		
源代码:http://download.csdn.net/detail/nuptboyzhb/4137784 1. 导入一个托盘图标的资源(.ico)格式:资源ID为IDI_ICON1 2 ...
 - [收集]在iPhone桌面的应用程序图标右上角显示数字
		
能够在ios桌面的程序icon右上角显示数字(badge number)的方法 在ViewController中的viewDidLoad方法中添加如下代码即可 - (void)viewDidLoad ...
 - Ubuntu14.04下Unity桌面托盘图标显示问题
		
本来想丰富一下功能,遂开始安装大开眼界:Ubuntu下10个厉害的Indicator小程序这里的Indicator小程序. 很不幸,在安装到indicator-multiload的时候,准备注销看一下 ...
 - IOS编程教程(八):在你的应用程序添加启动画面
		
IOS编程教程(八):在你的应用程序添加启动画面 虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些 ...
 - 将程序添加到右键菜单和图标(以记事本、UltraEdit为例)
		
原文:将程序添加到右键菜单(以记事本.UltraEdit为例) 如何将程序加入右键菜单,这里分别以记事本.UltraEdit为例! 以记事本程序为例: 1. 在运行中输入regedit,打开注册表,找 ...
 - 011.Adding Search to an ASP.NET Core MVC app --【给程序添加搜索功能】
		
Adding Search to an ASP.NET Core MVC app 给程序添加搜索功能 2017-3-7 7 分钟阅读时长 作者 本文内容 1.Adding Search by genr ...
 - C# WinForm程序添加启动画面
		
如果程序在装载时需要进行较长时间的处理,最好使用启动画面,一方面美化程序,一方面可以不使用户面对着一片空白的程序界面. 我手头上一个小项目主界面启动时需要检查用户文件及运行环境是否有效,需要一段时间处 ...
 - 微信小程序添加悬浮在线客服会话按钮
		
微信为小程序提供客服消息能力,小程序用户可以方便快捷地与小程序服务提供方进行沟通,并且已经做成了组件的形式,直接就可以调用.客服会话按钮,用于在页面上显示一个客服会话按钮,用户点击该按钮后会进入客服会 ...
 - 如何将程序添加到Windows桌面右键菜单
		
在Windows桌面上右键单击鼠标时,将显示默认菜单.如果您想要将其它程序添加到Windows桌面右键菜单中,则可以按照以下步骤执行: 运行WinUtilities上下文菜单管理器 点击添加 选择菜单 ...
 
随机推荐
- Linux运维工作总结教训
			
Linux运维一定要知道的六类好习惯和23个教训,避免入坑!从事运维三年半,遇到过各式各样的问题,数据丢失,网站挂马,误删数据库文件,黑客攻击等各类问题. 今天简单整理一下,分享给各位小伙伴. 一.线 ...
 - Spring-postConstruct参考-转载
			
Spring@PostConstruct注解和构造方法的调用顺序 先看下@PostConstruct的注解 * The PostConstruct annotation is used on a me ...
 - 修改链接服务器 Rpc &Rpc Out
			
USE [master] GO EXEC master.dbo.sp_serveroption @server=N'LinkName', @optname=N'rpc', @optvalue=N'tr ...
 - Django框架之ORM的相关操作(一)
			
一.一般操作 from django.db import models import datetime # Create your models here. class Author(models.M ...
 - opencv:Mat对象
			
Mat对象:图像文件的内存数据对象 读取为 Mat 对象 读取图像位Mat对象,获取图像的相关信息 #include <opencv2/opencv.hpp> #include <i ...
 - vscode git连接github
			
上一篇文章中介绍了vscode中git的简单使用方法vscode git的简单使用 上次只讲到了本地库的创建,这次说明下怎么push到github上 首先需要有一个github的账号 github官 ...
 - 3、高级方法(Advanced Recipes)
			
学习目录:树莓派学习之路-GPIO Zero 官网地址:https://gpiozero.readthedocs.io/en/stable/recipes_advanced.html 环境:Ubunt ...
 - StatelessWidget 无状态组件 StatefulWidget 有状态组件  页面上绑定数据、改变页面数据
			
一.Flutter 中自定义有状态组件 在 Flutter 中自定义组件其实就是一个类,这个类需要继承 StatelessWidget/StatefulWidget. StatelessWidget ...
 - python练习:使用二分法查找求近似平方根,使用二分法查找求近似立方根。
			
python练习:使用二分法查找求近似平方根,使用二分法查找求近似立方根. 重难点:原理为一个数的平方根一定在,0到这个数之间,那么就对这之间的数,进行二分遍历.精确度的使用.通过最高值和最低值确定二 ...
 - WebRTC的音频编码(转)
			
一.一个典型的IP通信模型 二.Server2Server技术分类 Server2Server这块也是一个专门的领域,这里只简单分个类. 1.同一国家相同运营商之间: 同一运营商之间也有丢包,在铁通, ...