博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[VC++]最小化图标至托盘中
阅读量:5888 次
发布时间:2019-06-19

本文共 1507 字,大约阅读时间需要 5 分钟。

 
经常都会看到最小化程序后就会在任务栏的托盘中保留一个小图标,即把窗口最小化至托盘中。实现起来很简单,只要明白它使用到的结构和一个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有三个可选参数:
NIM_ADDNIM_DELETENIM_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按钮的事件中执行即可。

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/11/15/vc_notifyicon.html,如需转载请自行联系原作者

你可能感兴趣的文章
图标库 vue_关于vue项目font字体图标库导入未显示的问题
查看>>
按钮开始多线程_Unity手游实战:从0开始SLG——ECS战斗(四)实战ECS架构和优化...
查看>>
加工中心刻字宏程序_宏程序螺旋铣圆周沉头孔
查看>>
如何把apk转换成aia格式_酷狗音乐如何将歌曲转换成MP3格式?方法超级简单
查看>>
为什么所请求的剪切操作失败_操作系统进程与线程基本概念理解
查看>>
mapbox symbols 层级设置_mapboxgl实现带箭头轨迹线
查看>>
hutool读取和导出excel_Office文档操作(Hutool-poi)
查看>>
python messagebox显示到最前面_如何在打开MessageBox之前关闭ProgressDialog?
查看>>
多重采样和超级采样哪个流畅_蒙特卡洛方法-多重采样
查看>>
时序约束优先级_Vivado工程经验与各种时序约束技巧分享
查看>>
nginx win 启动关闭_windows下nginx启动与关闭的批处理脚本
查看>>
python中实参包括哪些_第50p,形参与实参,Python中函数的参数详解
查看>>
minio 并发数_MinIO 参数解析与限制
查看>>
eap wifi 证书_用openssl为EAP-TLS生成证书(CA证书,服务器证书,用户证书)
查看>>
mysql 应用程序是哪个文件夹_Mysql 数据库文件存储在哪个目录?
查看>>
mysql半同步和无损复制_MySQL半同步复制你可能没有注意的点
查看>>
mysql能看见表显示表不存在_遇到mysql数据表不存在的问题
查看>>
使用mysql实现宿舍管理_JSP+Struts2+JDBC+Mysql实现的校园宿舍管理系统
查看>>
mysql alter 修改字段类型_MySQL ALTER命令:删除,添加或修改表字段、修改字段类型及名称等...
查看>>
mysql中的事务和锁_MySQL - 事务和锁中的互斥?
查看>>