c++如何设置托盘图标并闪烁

首先要用到头文件

#include"shellapi.h"

然后,定义一个托盘对象

NOTIFYICONDATA nid = { 0 };//托盘图标

接着,我们需要填充里面的值

nid.cbSize = sizeof(NOTIFYICONDATA);//长度
 nid.hWnd = hWnd;//窗口句柄
 nid.uID = IDI_SMALL;//图标的ID,这个在资源文件里面的Icon里面
 nid.hIcon = ::LoadIcon(hInst, MAKEINTRESOURCE(IDI_SMALL));//加载图标进去
 nid.uCallbackMessage = WM_NOTIFYICON;//这个是点击图标的事件消息,我们在消息处理函数WndProc()里面写一个case WM_NOTIFYICON:去处理鼠标点击图标事件
 nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;//图标样式
 _tcscpy(nid.szTip, _T("科学阅读器"));//当鼠标移动到图标的时候显示

这样我们就设置好了对象了。

接着,我们需要用到一个函数

Shell_NotifyIcon(NIM_ADD, &nid); //这个函数的意思就是告诉系统增加一个托盘图标,这时候,就可以看到右下角有图标了

为了要图标闪烁起来,我们需要一个定时器

SetTimer(hWnd, 1, 500, NULL);//第一个参数是窗口句柄,就是每500毫秒向窗口发送一个WM_TIMER的消息,第二个参数是计时器ID,第三个是时间,第四个为NULL。

全部都设置好了,接下来,就要在消息处理函数WndProc()里面去实现闪烁了:在全局定义一个bool型的变量。

case WM_TIMER://这是计时器发来的消息
  if (time == true){//time是我在全局定义的一个变量用来计算是更改正确的图标还是空图标的
   nid.hIcon =NULL;//当为空的时候,说明右下角已经有图标了,所以我要把图标设置为空,然后发送更改图标的信息给系统Shell_NotifyIcon(NIM_MODIFY, &nid);
   Shell_NotifyIcon(NIM_MODIFY, &nid);//更改托盘图标
   time = time-1;
  }
  else{//如果没有,我就要发送一个有图标的对象给系统
   nid.hIcon = ::LoadIcon(hInst, MAKEINTRESOURCE(IDI_SMALL));
   Shell_NotifyIcon(NIM_MODIFY, &nid);//更改托盘图标
   time = time + 1;
  }

最后,我们要来处理鼠标点击图标的事件

不要忘了把计时器关闭,否则,图标会一直闪烁,还有不要忘了去释放图标对象哦

 ShowWindow(hWnd, 10);//当然当点击后我们要把窗口显示出来。

KillTimer(hWnd, ID_TIMER);//第一参数是窗口句柄,第二个是计时器ID,就是关闭那个计时器










  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qt5_qt6

你的鼓励是我们创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值