首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

1.9  窗 体 动 画

本节主要对窗体进行动画设置,在窗体上添加一些动画效果,可以为操作者添加一些乐趣,下面的几个例子将详细介绍窗体动画的相关技术。

实例031 窗体中的滚动字幕

*实例说明

文本框:  
图1.31  窗体中的滚动字幕
普通窗体中的文字位置都是固定的,一些窗体中需要让文字动起来,例如一些广告性较强的界面中需要做一些滚动的字幕。本例实现了一个具有滚动字幕效果的窗体,运行本例,单击【演示】按钮,看到窗口中的文字开始滚动。单击【暂停】按钮,可以使字幕停止滚动。本例运行效果如图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  动画显示窗体
当用户启动程序后,普通的程序窗口都是瞬间显示到屏幕上,这样未免有些生硬。如果窗口能够慢慢的展现在用户面前,将会是什么样的效果?本例设计的是一个动画显示的窗体,该程序运行后,窗体是慢慢的以拉伸的效果显示到用户的面前。当关闭时也是一样慢慢的消失。本例运行效果如图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所示。

文本框:  
图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 直接在窗体上绘图

*实例说明

文本框:  
图1.34  直接在窗体上绘图

含有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  动画形式的程序界面

在很多的程序界面中,都是以菜单或工具栏的形式显示窗体界面,这种显示方式是以静止状态显示的,界面不够生动。下面介绍一个以动画显示窗体界面的设计方法。运行本例,效果如图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");

        }

*举一反三

根据本实例,读者可以实现以下功能。

*  制作摸拟网页。

  制作动画播放器。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论