转载: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程序添加托盘图标显示的更多相关文章

  1. MFC为应用程序添加托盘(右键托盘,弹出菜单)

    源代码:http://download.csdn.net/detail/nuptboyzhb/4137784 1.       导入一个托盘图标的资源(.ico)格式:资源ID为IDI_ICON1 2 ...

  2. [收集]在iPhone桌面的应用程序图标右上角显示数字

    能够在ios桌面的程序icon右上角显示数字(badge number)的方法 在ViewController中的viewDidLoad方法中添加如下代码即可 - (void)viewDidLoad ...

  3. Ubuntu14.04下Unity桌面托盘图标显示问题

    本来想丰富一下功能,遂开始安装大开眼界:Ubuntu下10个厉害的Indicator小程序这里的Indicator小程序. 很不幸,在安装到indicator-multiload的时候,准备注销看一下 ...

  4. IOS编程教程(八):在你的应用程序添加启动画面

    IOS编程教程(八):在你的应用程序添加启动画面   虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些 ...

  5. 将程序添加到右键菜单和图标(以记事本、UltraEdit为例)

    原文:将程序添加到右键菜单(以记事本.UltraEdit为例) 如何将程序加入右键菜单,这里分别以记事本.UltraEdit为例! 以记事本程序为例: 1. 在运行中输入regedit,打开注册表,找 ...

  6. 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 ...

  7. C# WinForm程序添加启动画面

    如果程序在装载时需要进行较长时间的处理,最好使用启动画面,一方面美化程序,一方面可以不使用户面对着一片空白的程序界面. 我手头上一个小项目主界面启动时需要检查用户文件及运行环境是否有效,需要一段时间处 ...

  8. 微信小程序添加悬浮在线客服会话按钮

    微信为小程序提供客服消息能力,小程序用户可以方便快捷地与小程序服务提供方进行沟通,并且已经做成了组件的形式,直接就可以调用.客服会话按钮,用于在页面上显示一个客服会话按钮,用户点击该按钮后会进入客服会 ...

  9. 如何将程序添加到Windows桌面右键菜单

    在Windows桌面上右键单击鼠标时,将显示默认菜单.如果您想要将其它程序添加到Windows桌面右键菜单中,则可以按照以下步骤执行: 运行WinUtilities上下文菜单管理器 点击添加 选择菜单 ...

随机推荐

  1. P & R 9

    Floorplan: 要做好floorplan需要掌握哪些知识跟技能? 明确Floorplan 处理的对象:对于数字设计的 Floorplan 来说,它是一个很依赖前后步骤的一个过程,这个可以看作是后 ...

  2. [C++]蛇形填数

    [从左下角开始,逆时针蛇形填数] #include <iostream> using namespace std; int main() { int n; cin>>n; in ...

  3. Vue - 如何使用npm run build后的dist文件夹

    脚手架vue cli生成项目后,使用 npm run build 生成了一个dist文件夹(应该是distribution的缩写) 只要放在http服务器上就可以运行. 使用一句python命令可以搭 ...

  4. Django - 美化显示request.META

    def index(request): values = request.META.items() html = [] for k, v in values: html.append('<tr& ...

  5. WordPress 安装教程

    1.要安装WordPress,先看他的环境要求 2.环境符合后,直接去官网下载 WordPress(点击去官网) 下载最新的安装包 3.下载解压后,直接在浏览器中访问 会自动跳转到安装界面 http: ...

  6. 一个Log-Tan积分

    \[\Large\int_{0}^{\pi }\theta \ln\tan\frac{\theta }{2}\mathrm{d}\theta \] \(\Large\mathbf{Solution:} ...

  7. B站上线互动视频背后,是一场谁都输不起的未来之战

    毋庸置疑的是,视频网站的竞争已愈发激烈.而它们的竞争体现在多个维度,比如买视频会员赠送购物网站会员.依靠各自的社交体系不断尝试打破圈层瓶颈等.当然,最直接的竞争还是体现在内容层面.购买独家版权.制作原 ...

  8. AFNetworking errorCode -1016 解决方法

    AFNetworking 默认是只能解析以下格式,如果需要支持data等格式,需要增加acceptableContentTypes AFNetworking.acceptableContentType ...

  9. MYSQL客户端管理工具

      双击安装navicact客户端管理工具: 双击启动脚本,并指定管理工具的navicat.exe文件 最后打开

  10. 吴裕雄--天生自然Numpy库学习笔记:NumPy 切片和索引

    ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组. import ...