日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用线程实现动态改变图标

發(fā)布時(shí)間:2025/3/15 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用线程实现动态改变图标 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用線程實(shí)現(xiàn)動(dòng)態(tài)改變圖標(biāo)
作者:cj_ict

下載本文示例代碼

前幾天看了一個(gè)《如何在標(biāo)題欄中顯示動(dòng)態(tài)圖標(biāo)》文章,作者為重慶建設(shè)集團(tuán)一所 唐星彬。覺得用SetTimer實(shí)現(xiàn)起來麻煩,且占用資源。手頭一癢將其改為線程實(shí)現(xiàn),并且把線程封裝在類里。使用簡單,不需要設(shè)置SetTimer在OnTimer函數(shù)里調(diào)用。只需直接調(diào)用

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

即可。
程序其他部分,是采用唐星彬的,我只是把有OnTimer實(shí)現(xiàn)的部分,改成用線程實(shí)現(xiàn)。

class CAnimateIcon { protected://創(chuàng)建一個(gè)列表變量,用于保存圖像列 CImageList m_imgList;//當(dāng)前圖像序號int m_iImageCounter;//圖像總數(shù)int m_nMaxNumOfImages;//關(guān)閉線程bool m_bExit; //擁有圖標(biāo)的窗口的窗口類指針CWnd * m_pWnd;//圖標(biāo)刷新間隔DWORD m_dwMilliseconds;public:void ChangeInterval(DWORD dwTimes);//改變圖標(biāo)刷新時(shí)間間隔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) {//擁有圖標(biāo)的窗口的窗口類指針m_pWnd=pWnd;ASSERT(m_pWnd);//圖標(biāo)刷新間隔m_dwMilliseconds=dwTimes; unsigned int nDummy;//注意:傳遞給線程本實(shí)例的指針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);//不再需要線程句柄,將其關(guān)閉return true; }UINT WINAPI CAnimateIcon::_ThreadAnimation(LPVOID pParam) {//從傳遞過來的實(shí)例指針,可以操作不同的實(shí)例,//注意線程函數(shù)是唯一和靜態(tài)的。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編譯通過!

總結(jié)

以上是生活随笔為你收集整理的用线程实现动态改变图标的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。