WEB开发网
开发学院软件开发VC 如何在标题栏中显示动态图标 阅读

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

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

本文配套源码

Tags:如何 标题 显示

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接