如何在标题栏中显示动态图标
2010-06-27 20:41:43 来源:WEB开发网一般情况下,程序中的标题栏的图标是静态的。那么如何让标题栏中的图标动起来呢。原理很简单,那就是做一系列的图片,让图片按顺序交替显示,图标就像动起来一样。现在动手来做吧!
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++编程疑难详解
本文配套源码
更多精彩
赞助商链接