如何在标题栏中显示动态图标

豆豆网   技术应用频道   2006年07月19日  【字号: 收藏本文

本文详细介绍如何在标题栏中显示动态图标

  本文示例源代码或素材下载

  一般情况下,程序中的标题栏的图标是静态的。那么如何让标题栏中的图标动起来呢。原理很简单,那就是做一系列的图片,让图片按顺序交替显示,图标就像动起来一样。现在动手来做吧!

  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++编程疑难详解

作者:唐星彬    责编:豆豆技术应用

正在加载评论...