用线程实现动态改变图标
作者:cj_ict

下载本文示例代码

前几天看了一个《如何在标题栏中显示动态图标》文章,作者为重庆建设集团一所 唐星彬。觉得用SetTimer实现起来麻烦,且占用资源。手头一痒将其改为线程实现,并且把线程封装在类里。使用简单,不需要设置SetTimer在OnTimer函数里调用。只需直接调用

m_animIcon.SetImageList(IDB_BITMAP_ANIM,6,RGB(0,0,0));
m_animIcon.Draw(this);

即可。
程序其他部分,是采用唐星彬的,我只是把有OnTimer实现的部分,改成用线程实现。

class CAnimateIcon
{
protected:
//创建一个列表变量,用于保存图像列 
CImageList m_imgList;
//当前图像序号
int m_iImageCounter;
//图像总数
int m_nMaxNumOfImages;
//关闭线程
bool m_bExit;
//拥有图标的窗口的窗口类指针
CWnd * m_pWnd;
//图标刷新间隔
DWORD m_dwMilliseconds;
public:
void ChangeInterval(DWORD dwTimes);//改变图标刷新时间间隔
BOOL Draw(CWnd *pWnd,DWORD dwTimes=1000);
CAnimateIcon();
~CAnimateIcon();
bool SetImageList(int IDOfImageListResource,int numberOfImages,COLORREF transparentColor);
protected:
static UINT WINAPI _ThreadAnimation(LPVOID pParam);
};
BOOL CAnimateIcon::Draw(CWnd *pWnd,DWORD dwTimes)
{
//拥有图标的窗口的窗口类指针
m_pWnd=pWnd;
ASSERT(m_pWnd);
//图标刷新间隔
m_dwMilliseconds=dwTimes;
unsigned int nDummy;
//注意:传递给线程本实例的指针
HANDLE hThread = (HANDLE) _beginthreadex(NULL,0,_ThreadAnimation,this,
CREATE_SUSPENDED,&nDummy);
if (!hThread)   {
TRACE(_T("Draw: Couldn''t start a ICON animation thread/n"));
return false;
}
else {
ResumeThread(hThread);
}
CloseHandle(hThread);//不再需要线程句柄,将其关闭
return true;
}
UINT WINAPI CAnimateIcon::_ThreadAnimation(LPVOID pParam)
{
//从传递过来的实例指针,可以操作不同的实例,
//注意线程函数是唯一和静态的。
CAnimateIcon &p=*(CAnimateIcon *)pParam;
while(!p.m_bExit){
if(p.m_imgList.m_hImageList==NULL)
return 0;
p.m_iImageCounter++;
if(p.m_iImageCounter>=p.m_nMaxNumOfImages)
p.m_iImageCounter=0;
HICON hIcon=p.m_imgList.ExtractIcon(p.m_iImageCounter);
HICON hPrevIcon=(HICON)p.m_pWnd->SetIcon(hIcon,false);
DestroyIcon(hPrevIcon);
Sleep(p.m_dwMilliseconds);
}
return 1;
}

在VC6.0+WIN2000+SP3编译通过!

用线程实现动态改变图标相关推荐

  1. mpvue微信小程序中使用svg图标,并通过代码动态改变图标颜色

    微信小程序,mpvue中使用svg图标,并通过代码改变图标颜色 本文主要是mpvue开发小程序的代码,不过微信小程序原生开发应该也是一样的,思路都是通用的,按照这个思路微信小程序原生开发一样可以实现同 ...

  2. android 动态改变图标颜色

    关键点 获取目标图标的所有像素点 验证像素点的alpha值,是否透明 在不透明的像素点上修改为我们想要的颜色 根据输入的颜色值改变图标颜色 final EditText et = findViewBy ...

  3. Android 动态改变桌面图标

    其实很简单,利用 AndroidManifest.xml 文件中的 <activity-alias> 标签即可实现. <activity-alias> 介绍 大家知道,对于 A ...

  4. iOS 动态改变应用图标

    整这东西整了一晚上,国内关于技术的文章实在是太不严谨了,小细节导致我走了很多弯路,最后在国外网站上找到的正确答案 参阅 https://www.hackingwithswift.com/example ...

  5. html动态资源加载进度,JavaScript_快速解决js动态改变dom元素属性后页面及时渲染的问题,今天实现一个进度条加载过程 - phpStudy...

    快速解决js动态改变dom元素属性后页面及时渲染的问题 今天实现一个进度条加载过程,dom结构其实就是两个div 控制里层div的宽width属性,就能实现进度条往前走的效果. 我的进度条是显示下载文 ...

  6. 桌面html布局,利用自定义桌面和HTML打造动态桌面图标

    建站学院(LieHuo.Net)技术文档电脑桌面对于大家来说并不陌生,每天打开计算机第一个映入眼帘的就是电脑桌面.漂亮的桌面可以使人心情愉悦.从一开始的静态桌面壁纸到现在的动态桌面壁纸,从最早的白色默 ...

  7. Electron无边框窗口(最小化、最大化、关闭、拖动)以及动态改变窗口大小

    文章目录 一.目标原型 1. 目标 2. 原型设计 3. 原型初步实现 二.无边框窗口 1. 要点 2. 改造 三.可拖拽区 1. 要点 2. 改造 四.最小化.最大化.关闭 1. 要点 2. 改造 ...

  8. android改变图标颜色

    同一个图标,但是可能会有多种背景颜色.比如,标识空气质量的图标,因空气质量有多种情形,对应的图标就有多种背景颜色. 实现这种需求有两种方式: 1.针对每一种情形,切一张对应的图标. 2.只切一张图标, ...

  9. 百度地图 自定义覆盖物 自定义字体图标 动态修改图标颜色

    实现效果: 图标用的是字体图标,为了方便动态改变颜色 关键代码 function ComplexCustomOverlay(params) {let defaultParams = {point: { ...

最新文章

  1. iis5.1配置php5.3.1详解,WinXP IIS 5.1 PHP 5.3 VC9.0 配置详解
  2. 如何搭建mysql的学习环境_Mysql学习笔记【一、环境安装配置】
  3. Vue学习笔记第一天--es6
  4. 数据中心的运维管理原则(二)
  5. minikube配置使用代理
  6. IAR切BANK--程序中的使用
  7. cacti 监控安装失败
  8. Apache Flink 在汽车之家的应用与实践
  9. pandas-事例练习
  10. python网盘系统_python做系统
  11. 【Vegas原创】远程桌面下重启xp系统的命令
  12. 转 @PathVariable是什么?详情及用法解析
  13. windows和linux 下将tomcat注册为服务
  14. 死磕 Java8 新特性,17 种日期处理方式!
  15. 计算机关于剪贴板的知识,如何打开电脑剪贴板图文教程
  16. android 通知写法_Android消息通知-Notifation
  17. docker 运行命令
  18. 小米手机是什么系统?
  19. MacOS技巧|Mac如何自定义触控栏Touch Bar?显示Touch Bar教程
  20. 心理学综述类期刊介绍|《New Ideas In Psychology》

热门文章

  1. 机器学习笔记(九)——决策树的生成与剪枝
  2. 从留存的本质出发,制定留存策略
  3. 中国市场新财富与新人群趋势
  4. 移动互联网派生app研究报告
  5. 搞了这么久的产品,终于看清了真相
  6. 人工智能风险分析技术研究进展
  7. 专题:区块链与数据共享(下)
  8. 【2016年第4期】大数据应用系统的消息驱动架构
  9. 李国杰(1943-),男,博士,中国工程院院士。
  10. 【离散数学】纠错码基本理论