[VC++]最小化图标至托盘中
经常都会看到最小化程序后就会在任务栏的托盘中保留一个小图标,即把窗口最小化至托盘中。实现起来很简单,只要明白它使用到的结构和一个Shell函数即可完成。但是如果要制作其他的菜单,需要另外制作,今天暂且不讨论。
首先来看一下这个托盘的结构,定义如下所示。
首先来看一下这个托盘的结构,定义如下所示。
1 typedef struct _NOTIFYICONDATAW {
2 DWORD cbSize;//一般为sizeof(NOTIFYICONDATA);
3 HWND hWnd;//this->m_hWnd;或theApp.m_pMainWnd->m_hWnd;
4 UINT uID;//一般为1,此处ID和前一个hWnd共同来识别窗口;
5 UINT uFlags;//NIF_ICON|NIF_MESSAGE;
6 UINT uCallbackMessage;//自定义消息(#define WM_TRAY_MESSAGE (WM_USER + 1)),此处的WM_TRAY_MESSAGE
7 HICON hIcon;
8 #if (NTDDI_VERSION < NTDDI_WIN2K)
9 WCHAR szTip[64];
10 #endif
11 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12 WCHAR szTip[128];
13 DWORD dwState;
14 DWORD dwStateMask;
15 WCHAR szInfo[256];
16 union {
17 UINT uTimeout;
18 UINT uVersion; // used with NIM_SETVERSION, values 0, 3 and 4
19 } DUMMYUNIONNAME;
20 WCHAR szInfoTitle[64];
21 DWORD dwInfoFlags;
22 #endif
23 #if (NTDDI_VERSION >= NTDDI_WINXP)
24 GUID guidItem;
25 #endif
26 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
27 HICON hBalloonIcon;
28 #endif
29 } NOTIFYICONDATAW, *PNOTIFYICONDATAW;
以上结构作为参数被Shell函数BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid );调用。而其中的dwMessage有三个可选参数:2 DWORD cbSize;//一般为sizeof(NOTIFYICONDATA);
3 HWND hWnd;//this->m_hWnd;或theApp.m_pMainWnd->m_hWnd;
4 UINT uID;//一般为1,此处ID和前一个hWnd共同来识别窗口;
5 UINT uFlags;//NIF_ICON|NIF_MESSAGE;
6 UINT uCallbackMessage;//自定义消息(#define WM_TRAY_MESSAGE (WM_USER + 1)),此处的WM_TRAY_MESSAGE
7 HICON hIcon;
8 #if (NTDDI_VERSION < NTDDI_WIN2K)
9 WCHAR szTip[64];
10 #endif
11 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12 WCHAR szTip[128];
13 DWORD dwState;
14 DWORD dwStateMask;
15 WCHAR szInfo[256];
16 union {
17 UINT uTimeout;
18 UINT uVersion; // used with NIM_SETVERSION, values 0, 3 and 4
19 } DUMMYUNIONNAME;
20 WCHAR szInfoTitle[64];
21 DWORD dwInfoFlags;
22 #endif
23 #if (NTDDI_VERSION >= NTDDI_WINXP)
24 GUID guidItem;
25 #endif
26 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
27 HICON hBalloonIcon;
28 #endif
29 } NOTIFYICONDATAW, *PNOTIFYICONDATAW;
NIM_ADD、NIM_DELETE和NIM_MODIFY
功能分别是添加、删除以及修改托盘中的图标.当然最后要把窗口给隐藏起来啦:1 //此处也可在其他地方调用。
2 theApp.m_pMainWnd->ShowWindow(SW_MINIMIZE);
3 //this->ShowWindow(SW_MINIMIZE);
4 theApp.m_pMainWnd->ShowWindow(SW_HIDE);
5 //this->ShowWindow(SW_HIDE);
将上述代码整理后,只要将Sheel_NotifyIcon的调用放到min按钮的事件中执行即可。2 theApp.m_pMainWnd->ShowWindow(SW_MINIMIZE);
3 //this->ShowWindow(SW_MINIMIZE);
4 theApp.m_pMainWnd->ShowWindow(SW_HIDE);
5 //this->ShowWindow(SW_HIDE);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架