本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Duilib – 点击程序关闭按钮最小化到托盘,点击托盘按钮恢复
原文链接:https://www.stubbornhuang.com/1145/
发布于:2021年02月09日 10:16:21
修改于:2021年02月09日 10:16:21

1 功能描述
点击程序关闭按钮,程序最小化到托盘中并显示托盘图标;
单击图标,使窗口正常显示,右键图标显示菜单,点击程序关闭按钮退出程序。
2 实现
2.1 最小化到托盘功能实现
2.1.1 变量声明与函数声明
//定义托盘图标对象
NOTIFYICONDATA m_trayIcon;
//添加托盘图标(初始化)
void AddTrayIcon();
//处理托盘图标上的事件
LRESULT OnTrayIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
2.1.2 函数实现
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);
//右击后点别地可以清除“右击出来的菜单”
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(0);
}
}
bHandled = true;
return 0;
}
2.2 最小化到托盘功能调用
2.2.1 在DuiLib虚函数HandleMessage中添加对托盘图标响应消息WM_TO_TRAY的处理
case WM_TO_TRAY:
{
OnTrayIcon(uMsg,wParam,lParam, bHandled);
}
2.2.2 在点击关闭按钮时调用AddTrayIcon()
// 关闭按钮
if (_tcsicmp(msg.pSender->GetName(), Btn_Close) == 0)
{
// 隐藏到托盘
AddTrayIcon();
return;
}
当前分类随机文章推荐
- Duilib - 设置窗体阴影 阅读1721次,点赞1次
- Duilib - 各个控件的消息响应类型 阅读1533次,点赞0次
- Duilib - RichEdit作为日志输出控件,更新日志内容后并自动跳到最后一行 阅读1175次,点赞2次
- Duilib - 超链接文本 阅读2072次,点赞0次
- Duilib - duilib应用程序实现文件可拖拽的功能 阅读1288次,点赞0次
- Duilib - RichEdit和List等控件增加垂直滚动条vscrollbar和水平滚动条hscrollbar 阅读499次,点赞2次
- Duilib - 点击按钮弹出模态对话框 阅读681次,点赞0次
- Duilib - CDuiString转换为std::string 阅读998次,点赞0次
- Duilib - 点击程序关闭按钮最小化到托盘,点击托盘按钮恢复 阅读868次,点赞0次
- Duilib - RichEdit控件发送textchanged消息 阅读405次,点赞0次
全站随机文章推荐
- C++ - 函数返回多个返回值的方法总结 阅读574次,点赞0次
- 解决Python爬虫在爬资源过程中使用urlretrieve函数下载文件不完全且避免下载时长过长陷入死循环,并在下载文件的过程中显示下载进度 阅读2988次,点赞0次
- 资源分享 - C++标准库(第2版,侯捷译) 中文高清PDF下载 阅读1770次,点赞0次
- 资源分享 - Computational Geometry - Algorithms and Applications, Third Edition 英文高清pdf下载 阅读3974次,点赞1次
- 资源分享 - 非均匀有理B样条(第二版,Les Piegl),The NURBS Book中文译文版下载 阅读6329次,点赞8次
- 资源分享 - Game Programming Golden Rules 英文高清PDF下载 阅读677次,点赞0次
- 资源分享 - Game Physics Engine Development (First Edition) 英文高清PDF下载 阅读945次,点赞0次
- 资源分享 - OpenGL 4.0 Shading Language Cookbook (First Edition) 英文高清PDF下载 阅读979次,点赞0次
- 资源分享 - Essential Mathematics for Games and Interactive Applications(Second Edition) 英文高清PDF下载 阅读1092次,点赞0次
- 姿态估计之COCO数据集骨骼关节keypoint标注对应 阅读5542次,点赞4次
评论
144