一般情況下,程序中的標題欄的圖標是靜態的。那麼如何讓標題欄中的圖標動起來呢。原理很簡單,那就是做一系列的圖片,讓圖片按順序交替顯示,圖標就像動起來一樣。現在動手來做吧!
1.新建一個CAnimateIcon類
a.AnimateIcon.h如下:
class CAnimateIcon
{
protected:
//創建一個列表變量,用於保存圖像列
CImageList m_imgList;
//當前圖像序號
int m_iImageCounter;
//圖像總數
int m_iMaxNumOfImages;
HICON hIcon;
HICON hPrevIcon;
public:
CAnimateIcon();
~CAnimateIcon();
bool SetImageList(int IDOfImageListResource,int numberOfImages,COLORREF transparentColor);
bool ShowNextImage();
};
b.AnimateIcon.cpp如下:
#include "StdAfx.h"
#include "AnimateIcon.h"
CAnimateIcon::CAnimateIcon()
{
m_iImageCounter=-1;
m_iMaxNumOfImages=-100;
m_imgList.m_hImageList=NULL;
}
CAnimateIcon::~CAnimateIcon()
{
DestroyIcon(hPrevIcon);
}
//初始化圖像列表
bool CAnimateIcon::SetImageList(int IDOfImageListResource,
int numberOfImages,COLORREF transparentColor)
{
if(numberOfImages<=0)
return false;
m_iMaxNumOfImages=numberOfImages;
VERIFY(m_imgList.Create(IDOfImageListResource,16,1,transparentColor));
return true;
}
bool CAnimateIcon::ShowNextImage()
{
if(m_imgList.m_hImageList==NULL)
return false;
m_iImageCounter++;
if(m_iImageCounter>=m_iMaxNumOfImages)
m_iImageCounter=0;
hIcon=m_imgList.ExtractIcon(m_iImageCounter);
HICON hPrevIcon=(HICON)AfxGetMainWnd()->SetIcon(hIcon,false);
DestroyIcon(hPrevIcon);
return true;
}
2.創建一個基於對話框的程序:
加入一個WM_TIMER消息處理函數
void CAnimateDlgIconDlg::OnTimer(UINT nIDEvent)
{
//調用成員函數顯示圖片
m_animIcon.ShowNextImage();
CDialog::OnTimer(nIDEvent);
}
在主對話框中的InitInstance中
//初始化圖像列表
m_animIcon.SetImageList(IDB_BITMAP_ANIM,6,RGB(0,0,0));
//設置圖像更換時間為500毫秒
m_timerID=this->SetTimer(99,500,NULL);
在VC6.0+WIN2000+SP3編譯通過!
參考文獻:Visual C++編程疑難詳解
本文配套源碼