c++如何设置托盘图标并闪烁
2016-09-08 17:16
1136 查看
首先要用到头文件
#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,就是关闭那个计时器
#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,就是关闭那个计时器
相关文章推荐
- Ubuntu-Desktop-12.04 如何设置系统托盘图标
- 如何设置系统托盘图标
- paip.提升用户体验------c++ Qt5 实现程序图标以及动态托盘闪烁图标
- 如何设置delphi程序托盘图标
- winform如何最小化成托盘图标
- 设置了“在桌面上为图标标签使用阴影“却没有效果,如何解决。
- c++实现系统托盘图标
- 在windows系统任务栏的托盘中显示图标 c++
- VB6如何在托盘中写入应用程序图标
- How to add icon for the item of ListCtrl using C++ (Mail Attachment ListCtrl) - 如何用C++为ListCtrl的Item添加图标(邮件附件ListCtrl)
- 如何设置网页地址栏前面的标志favicon图标?
- VC如何作出有动画效果的托盘图标
- 如何通过托盘图标得到该所属进程
- [C#]如何让窗口最小化到系统托盘(右下角的小图标)
- 基于Tomcat的Web程序如何设置“收藏夹”图标
- 如何实现托盘图标
- c++实现系统托盘图标
- 如何有效的让系统托盘下的图标消失
- 如何设置网站的图标
- C++win32 SDK下面如何修改应用程序的图标