程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 如何在標題欄中顯示動態圖標

如何在標題欄中顯示動態圖標

編輯:關於VC++

一般情況下,程序中的標題欄的圖標是靜態的。那麼如何讓標題欄中的圖標動起來呢。原理很簡單,那就是做一系列的圖片,讓圖片按順序交替顯示,圖標就像動起來一樣。現在動手來做吧!

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++編程疑難詳解

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved