用线程实现动态改变图标

stchangecc

stchangecc

2016-01-29 11:54

用线程实现动态改变图标,用线程实现动态改变图标

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下载本文示例代码

前几天看了一个《如何在标题栏中显示动态图标》文章,作者为重庆建设集团一所 唐星彬。觉得用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 threadn"));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编译通过!

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)
展开更多 50%)
分享

猜你喜欢

用线程实现动态改变图标

C语言教程 C语言函数
用线程实现动态改变图标

实现Web页面内容动态改变的dhtml操作

Web开发
实现Web页面内容动态改变的dhtml操作

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用JAVA实现线程等待提示框

编程语言 网络编程
用JAVA实现线程等待提示框

用Delphi实现动态获取版本信息

Delphi
用Delphi实现动态获取版本信息

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用VC实现多串口多线程工业控制

编程语言 网络编程
用VC实现多串口多线程工业控制

用Java实现多线程服务器程序

编程语言 网络编程
用Java实现多线程服务器程序

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

HTML之清单标记

HTML之清单标记

三维实体速成最简单入门法[第三集]

三维实体速成最简单入门法[第三集]
下拉加载更多内容 ↓