1.9 窗 体 动 画
本节主要对窗体进行动画设置,在窗体上添加一些动画效果,可以为操作者添加一些乐趣,下面的几个例子将详细介绍窗体动画的相关技术。
实例031 窗体中的滚动字幕
实例说明
普通窗体中的文字位置都是固定的,一些窗体中需要让文字动起来,例如一些广告性较强的界面中需要做一些滚动的字幕。本例实现了一个具有滚动字幕效果的窗体,运行本例,单击【演示】按钮,看到窗口中的文字开始滚动。单击【暂停】按钮,可以使字幕停止滚动。本例运行效果如图1.31所示。
技术要点
滚动字幕的效果其实就是改变了文字的位置,在窗体中显示一串文字最好的办法就是利用Label控件。将Label控件的位置改变就可以实现文字的位置变换,如果该控件的位置不断的向水平方向移动,就会实现文字的滚动效果。改变Label控件的水平位置可以通过改变Label控件的Left的值来实现。用Timer控件对文字的移动进行时间控制。
实现过程
(1)创建一个项目,将其命名为Ex01_31,默认窗体为Form1。
(2)在窗体上添加Label控件用来显示消息;添加Button控件用来控制消息的运动;添加Timer控件用来控制滚动速度。
(3)主要程序代码。
private void timer1_Tick(object sender, EventArgs e)//用Timer来控制滚动速度
{
label1.Left -= 2;
if (label1.Right < 0)
{
label1.Left = this.Width;
}
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true; //开始滚动
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false; //停止滚动
}
注意:要特别注意文字滚动的方向问题,向左则减,向右则加。
举一反三
根据本实例,读者可以开发以下程序。
可以在窗体中设置一个滚动的图片。
可以在窗体中设置一个滚动的提示信息。
实例032 动画显示窗体
实例说明
当用户启动程序后,普通的程序窗口都是瞬间显示到屏幕上,这样未免有些生硬。如果窗口能够慢慢的展现在用户面前,将会是什么样的效果?本例设计的是一个动画显示的窗体,该程序运行后,窗体是慢慢的以拉伸的效果显示到用户的面前。当关闭时也是一样慢慢的消失。本例运行效果如图1.32所示。
技术要点
Windows提供了一个API函数Animate Window,该函数可以实现窗体的动画效果,AnimateWindow函数在C#中的声明如下。
[DllImportAttribute("user32.dll")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
参数说明如下。
l hwnd:目标窗口句柄。
l dwTime:动画的持续时间,数值越大动画效果的时间就越长。
l DwFlags:DwFlags参数是动画效果类型选项,该参数在C#中的声明如下:
public const Int32 AW_HOR_POSITIVE = 0x00000001;
public const Int32 AW_HOR_NEGATIVE = 0x00000002;
public const Int32 AW_VER_POSITIVE = 0x00000004;
public const Int32 AW_VER_NEGATIVE = 0x00000008;
public const Int32 AW_CENTER = 0x00000010;
public const Int32 AW_HIDE = 0x00010000;
public const Int32 AW_ACTIVATE = 0x00020000;
public const Int32 AW_SLIDE = 0x00040000;
public const Int32 AW_BLEND = 0x00080000;
DwFlags参数可选值含义如表1.1所示
表1.1 参数说明
|
标 志 |
描 述 |
|
AW_SLIDE |
使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略 |
|
AW_ACTIVE |
激活窗口。在使用了AW_HIDE标志后不要使用这个标志 |
|
AW_BLEND |
使用淡入效果。只有当hWnd为顶层窗口的时候才可以使用此标志 |
|
AW_HIDE |
隐藏窗口,缺省则显示窗口 |
|
AW_CENTER |
若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展 |
|
AW_HOR_POSITIVE |
自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略 |
|
AW_HOR_NEGATIVE |
自右向左显示窗口。当使用了 AW_CENTER 标志时该标志被忽略 |
|
AW_VER_POSITIVE |
自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略 |
|
AW_VER_NEGATIVE |
自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略 |
实现过程
(1)创建一个项目,将其命名为Ex01_32,默认窗体为Form1。
(2)在窗体上添加PictureBox控件。
(3)设置PictureBox控件的Image属性。
(4)主要代码如下。
public Form1( )
{
InitializeComponent( );
AnimateWindow(this.Handle, 300, AW_SLIDE + AW_VER_NEGATIVE);//开始窗体动画
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{ //结束窗体动画
AnimateWindow(this.Handle, 300, AW_SLIDE + AW_VER_NEGATIVE + AW_HIDE);
}
举一反三
根据本实例,读者可以开发以下程序。
实现窗体的淡入淡出。
实现窗体从中间扩散显示。
实例033 制作闪烁的窗体
实例说明
Windows系统中,当程序在后台运行时,如果某个窗口的提示信息需要用户浏览,该窗口就会不停的闪烁,这样就会吸引用户的注意。同样,如果在自己的程序中使某个窗口不停的闪烁就会吸引用户的注意。本例设计了一个闪烁的窗体,运行程序,单击【开始闪烁】按钮,窗体就会不停的闪烁,单击【停止】按钮,窗体就会停止闪烁。本例运行效果如图1.33所示。

技术要点
Windows提供了一个API函数FlashWIndow,该函数可以使窗体闪烁一下。FlashWIndow函数在C#中声明如下:
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern bool FlashWindow(IntPtr handle, bool bInvert);
参数说明如下。
l handle:表示将要闪烁的窗体。
l bInvert:是否恢复状态。
利用该函数只能使窗体闪烁一下,如果让窗口不停地闪烁,就需要用一个Timer控件每隔一段时间就调用该函数使窗体闪烁。
实现过程
(1)创建一个项目,将其命名为Ex01_33,默认窗体为Form1。
(2)在窗体上添加PictureBox控件用来显示窗体;添加Button、Timer控件用来开始和停止闪烁。
(3)设置PictureBox控件的Image属性。
(4)主要程序代码。
timer1的Tick事件处理代码如下:
private void timer1_Tick(object sender, EventArgs e)
{
FlashWindow(this.Handle,true);
}
【开始闪烁】按钮的单击事件,用来启动窗体闪烁:
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
【停止】按钮的单击事件,用来停止窗体的闪烁:
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
举一反三
根据本实例,读者可以开发以下程序。
利用Visible属性制作一个闪烁的图片。
制作一个闪烁的按钮。
实例034 直接在窗体上绘图
实例说明
含有Graphics对象的控件都能够在其上进行绘图,很多软件就是通过Graphics对象来美化程序的主界面,因为窗体中含有Graphics对象,所以可以将窗体看作一个大画板,一个可以在上面绘图的特殊控件。本例设计了一个简单的绘图软件,该软件就利用了在窗体上绘图的方法,运行本软件可以在窗体上进行绘图。实例效果如图1.34所示。
技术要点
窗体中含有Graphics对象,使用该对象就能够完成大部分绘图功能,Graphics对象已经对Windows底层的一些绘图API进行了封装,使用起来比较方便。下面介绍Graphics对象的常用方法。
Graphics.DrawLine绘图方法用来绘制一条连接由坐标对指定的两个点的线条。其语法结构如下:
public void DrawLine (Pen pen,int x1,int y1,int x2,int y2)
参数说明如下。
l pen:Pen对象,确定线条的颜色、宽度和样式。
l x1:第一个点的x坐标。
l y1:第一个点的y坐标。
l x2:第二个点的x坐标。
l y2:第二个点的y坐标。
实现过程
(1)创建一个项目,将其命名为Ex01_34,默认窗体为Form1。
(2)向Form1窗口中添加GroupBox控件,用作RadioButton控件的容器;添加Button控件用来推出程序。
(3)主要程序代码。
在窗体单元的private中添加变量如下:
int startX,startY;
Graphics g;
单击鼠标事件。具体代码如下:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
startX=e.X;
startY = e.Y;
}
鼠标在窗体中的移动事件。具体代码如下:
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
g = this.CreateGraphics( );
Pen p = new Pen(Color.Black, 1);
if(radioButton2.Checked==true)
{
g.DrawRectangle(p, e.X, e.Y, 1, 1);
}
}
鼠标抬起事件。具体代码如下:
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
g = this.CreateGraphics( );
Pen p = new Pen(Color.Black, 2);
if (radioButton1.Checked == true )
{
g.DrawLine(p, startX, startY, e.X, e.Y);
}
}
举一反三
根据本实例,读者可以实现以下功能。
改变画笔的颜色。
在窗体上绘制矩型。
实例035 动画形式的程序界面
实例说明
在很多的程序界面中,都是以菜单或工具栏的形式显示窗体界面,这种显示方式是以静止状态显示的,界面不够生动。下面介绍一个以动画显示窗体界面的设计方法。运行本例,效果如图1.35所示。
技术要点
在该实例中用到了Microsoft Animation Control 6.0(SP4)COM组件,所以要从工具箱“选择项”中将该组件添加到工具箱,然后继续将该组件从工具箱添加到窗体即可。下面介绍本例中用到的相关方法。
AxAnimation.open方法用来播放动画文件。其结构如下:
Public void AxAnimation.open(string bstrFilename)
参数说明如下。
l bstrFilename:将要播放的文件名。
注意:因为使用了AxAnimation类,所以要添加对WMPLib命名空间的引用。
实现过程
(1)创建一个项目,将其命名为Ex01_35,默认窗体为Form1。
(2)在Form1窗体添加PictureBox控件用来显示图片,添加Microsoft Animation Control 6.0 (SP4)COM组件用来播放动画。
(3)主要程序代码。
private void Form1_Load(object sender, EventArgs e)
{
axAnimation1.Open("Electron.avi");
axAnimation2.Open("zybiao.avi");
axAnimation3.Open("gd.avi");
}
举一反三
根据本实例,读者可以实现以下功能。
制作摸拟网页。
制作动画播放器。





