Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1266679
  • 博文数量: 960
  • 博客积分: 52560
  • 博客等级: 大将
  • 技术积分: 13131
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-31 14:15
文章分类

全部博文(960)

文章存档

2011年(1)

2008年(959)

我的朋友

分类: C/C++

2008-08-01 16:56:28

下载本文示例代码
下载本文示例代码



一般情况下,程序中的标题栏的图标是静态的。那么如何让标题栏中的图标动起来呢。原理很简单,那就是做一系列的图片,让图片按顺序交替显示,图标就像动起来一样。现在动手来做吧!
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 编程疑难详解 下载本文示例代码
阅读(369) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~