My FAQ,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 图形用户界面
动感的图标
作者:gnuljf 时间:2001-10-12 10:15 出处:互联网 责编:MyFAQ
              摘要:动感的图标
 

动感的图标


   看了这么久的WINDOWS 单调而标准的界面,不知你是否会觉得有些烦。其实你只需要稍做改动,就可令你的应用程序增色不少。用一句流行的话来说,就是COOL极了。本文将介绍一种在窗口标题栏实现动态图标的方法,只需少量的代码,就可以得到一种奇妙的效果。就像超级解霸在运行时不断转动的图标一样。
  下面就让我们开始吧。我们将用VISUAL C++来实现它。首先基于C++的面向对象的设计思想,我们应该建立一个自己的类来管理有关类对象的创建、运行、销毁等等工作。但是不要忘了使用VISUAL C++很关键的一条就是要善于使用微软的MFC(基本类库),在MFC中,封装了很多常用的类和一些WINDOWS的API函数。我们应该感谢这些优秀的程序员,感谢他们为我们所作的大量的工作。由于他们的努力使得很多复杂的问题变得简单。在本处我们可以发现在MFC中有一个叫做CImage List 的类对我们很有帮助。这个类用于有效地管理一系列的相似的位图或图标,它实现了WINDOWS的通用图像列表控制。我们应该在自己的应用程序的类中包含这个类的一个对象做为数据成员,再完成一些附加的工作就大功告成了。
  我们所要使用的CImageList类的有关数据成员和成员函数的说明如下:
  m_hImageList 是一个包含了与这个对象相关的图形列表的句柄create函数初始化一个图像链表并把它联接到CImageList类一个对象上它的第一个参数是包含了图标的位图资源ID值,第二个参数是指16×16点的位图,第三个参数使用默认值,第四个参数是颜色的RGB值。
  具体的做法如下:
  一、 把头文件和实现文件加入到你自己的项目中
  二、 创建需要的位图资源(四个16×16像素点的图标)
  三、 在主框架类的开头包含头文件
  #include“myactive.h"
  四、为主框架类加上如下数据成员
  CMyactive m_active;//加入类对象UINT m_time;//设置时间
  五、为主框架类的函数添加如下代码m-active.setimagelist(idb-anim-imglist,4,rgb(0,0,0));
  上面函数的第一个参数是资源ID值,第二个是相似图像的数目,第三个参数设置颜色
  m_time = this->settimer(99,500,null);
  以上函数用于生成一个定时器
  六、用ClassWizard为主框架类增加WM_DESTROY消息,增加ondestroy()成员函数,添加如下语句,回收系统资源。
  CFrameWnd::OnDestroy();
  if(m_time!= 0)
  killtimer(m_time);
  七、 用ClassWizard为主框架类增加WM_TIMER消息,添加成员函数,并加上如下代码,以实现动态图标m_active.shownextimage();
  最后,编译、运行即可。
  我们所定义的类的头文件和实现文件如下:
  //myactive.h实现类的申明
  #if !defined(AFX-MYACTIVE-H_-47E058AD-6F69-11D2-B59C-86DD54033006-INCLUD-ED-)
  #define AFX- MYACTIVE-H-47E058AD-6F69-11D2-B59C-86DD54033006-INCLUDED-
  class CMyactive
  {
  protected :
  CImageList m_imgList;//构造对象
  int m_Counter;//保存数据
  int m_Images;
  HICON hIcon;//图标句柄
  HICON hPrevIcon ;
  public:
  CMyactive();
  ~CMyactive();
  BOOL Set Image List(int IDResource,int number,COLORREF color);
  BOOL ShowNextImage();
  };
  #endif//#define AFX-MYAC-TIVE-H-47E058AD-6F69-11D2-B59C-86DD54033006_-INCLUDED-
  //实现文件
  #include “stdafx.h"
  #include “myactive.h"
  CMyactive:: CMyactive ()//缺省构造函数
  {
  m_Counter = -1;
  m_Images = -99;
  m_imgList.m_hImageList = NULL;//初始化链表
  }
  CMyactive::~ CMyactive ()
  {
  if (hPrevIcon)
  DestroyIcon(hPrevIcon);
  //回收资源
  }
  BOOL CMyactive::SetImageList(int IDResource,int number,COLORREF color)
  {
  if(number<= 0)
  return FALSE;
  m-Images = number;
  VERIFY(m-img List.Create(IDResource,16,1,color));
  return TRUE;
  }
  BOOL CMyactive::ShowNextImage()//此函数将被反复调用,实现动态效果
  {
  if(m_imgList.m_hImageList == NULL)
  return FALSE;
  m_Counter++;
  if(m_Counter >= m_Images)
  m_Counter =0;
  //从图像链表中创建图标
  hIcon = m_imgList.ExtractIcon(m_Counter);
  //向主窗口发送消息通知更新图标
  HICON hPrevIcon = (HICON) AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
  //释放资源
  if (hPrevIcon)
  DestroyIcon(hPrevIcon);
  return TRUE;
  }(成都 飞扬 )

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有