分享
 
 
 

动感的图标

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

动感的图标

看了这么久的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;

}(成都 飞扬 )

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有