VC应用程序中插入微型动画

作者:陈胜利


本文利用CImageList类保存数幅画面,利用Draw函数在一定的时间间隔播放出
来,形成了类似GIF动画的效果。该方法可以在Window的客户区内、工具条上、
状态条 上播放动画。本文还给出了利用SetIcon函数在窗口标题栏上播放动画的方法。
----
动画是不同的相对连续的几幅静态画面按一定的时间间隔显示出来利用
人的 视觉原理形成动的效果。在应用程序中插入动画可以为您的应用程序增
加不少特色, 到美化界面的效果。在VC中播放动画的方法非常多,这里向大
家介绍在应用程序中加 入类似GIF动画的一种简便方法。

----
一、原理

----
VC中有一个CImageList类可以以图像列表的方式管理图像,图像列表中的
图像大小相同,索引以0为开始,每个图像都可以单独引用。Microsoft Win32
API
提供了一系列的函数,您可以利用这些函数创建、销毁图像列表,可以显示图
像、增 加和删除图像,替代、合并和拖动图像。

---- CImageList
类提供了Windows图像列表通用控件功能。这个控件(也即
CImageList
类)仅仅适用于运行于Window 95 Windows NT 3.51版或更高版本。
下面 对本文用到的函数简要说明如下:

---- ... ...

----
在程序中声明一个CImageList,调用Create函数创建该类,然后以一定的时
间用Draw函数循环显示图像,就可以形成动画效果。Create类有几个重载函数,
可以根 据不同的资源调用不同的函数,为了简便其间,本文只采用图标资源,更
详细的资料 见联机手册。

----
二、编程与实现

----
首先,建立图表资源。在VC6.0中利用资源编辑器,建立几幅图表,IDI_ICON1
IDI_ICON2
IDI_ICON3....,在编辑图标时选者Custom,将图标设置成大小为6 4X32
由于Windows的各个部件不完全相同,其实现方法也不完全相同,下面 对在窗口不同
位置显示动画的方法分别介绍。

---- 1
、在View类客户区绘制动画

----
在类的定义文件中加入下列变量:

---- ... ...

----
首先在口在函数时初始化pt1,m_Play,m_ImageNumber:

---- ... ...

---- .........//
把您要播放的所有资源加入图像列表。

----
OnCreate函数中设置计时器,并创建图像列表:

---- ... ...

----
响应ON_TIMER消息,显示动画:

---- ... ...

----
最后别忘了在OnDestroy函数中,增加在窗口撤销时中止定时器的代码。

---- 2
、在状态条上显示动画

----
由于状态条也是窗口,所以也可以在其上显示动画。状态条时主窗口的子窗
口,在CMainFrame类中可以看到下列代码:

protected: // control bar embedded members
CStatusBar m_wndStatusBar;

----
所以为了在状态条上显示动画,其编程代码应在CMainFrame类中加入。首先
创建 资源文件和图像列表类,具体方法和代码见View类客户区绘制动画一节,此
处不再重 复。下面进给出ON_TIMER的响应函数:

---- ... ...

----
上述代码将在状态条左上方播放动画。

----
三、在工具栏上播放动画

----
由于工具栏的性质与状态条差不多,其播放动画的方法也相似,下面进给出
ON_TIMER
的响应函数:

void CMainFrame::OnTimer(UINT nIDEvent)

... ...

----
上述代码将在工具栏右上方播放动画。但如仔细观察,动画的位置并不是靠
近窗口 最右边,这是因为工具栏的窗口有边界,采用如下方法,可以把画面移到
窗口右边:

---- ... ...

----
这是因为工具栏占据的位置属于CMainFrame的客户区。

---- 4
、使图标变成动画

----
CWnd类中有一个函数

HICON SetIcon( HICON hIcon, BOOL bBigIcon );

----
可以改变窗进口的图标,所以您可以通过使用该函数不断的改变图
标使图标 动起来,效果像GetRight一样。 OnTimer函数中加入下列代码:

SetIcon(m_ImageList1.ExtractIcon(m_Play),FALSE);

----
就可以使图标动起来,当然为了使程序工作的更好,您最好重建一套图标资源。

----
VC中另一可以改变图标的函数是SetClassLong(),又兴趣的朋友可以一试。