*实例说明
当用户启动程序后,普通的程序窗口都是瞬间显示到屏幕上,这样未免有些生硬。如果窗口能够慢慢的展现在用户面前,将会是什么样的效果?本例设计的是一个动画显示的窗体,该程序运行后,窗体是慢慢的以拉伸的效果显示到用户的面前。当关闭时也是一样慢慢的消失。本例运行效果如图1.32所示。
*技术要点
Windows提供了一个API函数Animate Window,该函数可以实现窗体的动画效果,AnimateWindow函数在C#中的声明如下。
[DllImportAttribute("user32.dll")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
参数说明如下。
hwnd:目标窗口句柄。
dwTime:动画的持续时间,数值越大动画效果的时间就越长。
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);
}
*举一反三
根据本实例,读者可以开发以下程序。
实现窗体的淡入淡出。
实现窗体从中间扩散显示。
当用户启动程序后,普通的程序窗口都是瞬间显示到屏幕上,这样未免有些生硬。如果窗口能够慢慢的展现在用户面前,将会是什么样的效果?本例设计的是一个动画显示的窗体,该程序运行后,窗体是慢慢的以拉伸的效果显示到用户的面前。当关闭时也是一样慢慢的消失。本例运行效果如图1.32所示。
*技术要点
Windows提供了一个API函数Animate Window,该函数可以实现窗体的动画效果,AnimateWindow函数在C#中的声明如下。
[DllImportAttribute("user32.dll")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
参数说明如下。
hwnd:目标窗口句柄。
dwTime:动画的持续时间,数值越大动画效果的时间就越长。
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);
}
*举一反三
根据本实例,读者可以开发以下程序。
实现窗体的淡入淡出。
实现窗体从中间扩散显示。