在显示或者隐藏窗口的时候,可以利用Windows API中的AnimateWindow函数实现一些特殊的效果。主要的动画类型有四种:滚动、幻灯片、折叠或展开和alpha混合渐变。
窗口动画效果
首先定义动画工具类,引入AnimateWindow函数。
public class WindowsEffects
{
public const int AW_ACTIVATE = 0x00020000; // 激活窗口。不要在AW_HIDE中使用此值。
public const int AW_BLEND = 0x00080000; // 使用淡入效果。此标志只能在hwnd是顶级窗口时使用。
public const int AW_CENTER = 0x00000010; // 如果使用了AW_HIDE,则使窗口看起来向内折叠;如果没有使用AW_HIDE,则使窗口向外展开。不同的方向标志没有效果。
public const int AW_HIDE = 0x00010000; // 隐藏窗口。默认情况下,窗口会显示出来。
public const int AW_HOR_POSITIVE = 0x00000001;// 使窗口从左到右产生动画效果。此标志可用于滚动或幻灯片动画。当与AW_CENTER或AW_BLEND一起使用时,它会被忽略。
public const int AW_HOR_NEGATIVE = 0x00000002;// 从右到左使窗口具有动画效果。此标志可用于滚动或幻灯片动画。当与AW_CENTER或AW_BLEND一起使用时,它会被忽略。
public const int AW_SLIDE = 0x00040000;// 使用幻灯片动画。默认情况下,使用滚动动画。当与AW_CENTER一起使用时,这个标志将被忽略。
public const int AW_VER_POSITIVE = 0x00000004; // 从上到下动画窗口。此标志可用于滚动或幻灯片动画。当与AW_CENTER或AW_BLEND一起使用时,它会被忽略。
public const int AW_VER_NEGATIVE = 0x00000008; // 从下到上使窗口具有动画效果。此标志可用于滚动或幻灯片动画。当与AW_CENTER或AW_BLEND一起使用时,它会被忽略。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int AnimateWindow(IntPtr hwand, int dwTime, int dwFlag);
}
窗口从左到右展开

Form2 animateForm;
private void button1_Click(object sender, EventArgs e)
{
animateForm = new Form2();
WindowsEffects.AnimateWindow(animateForm.Handle, 3000, WindowsEffects.AW_HOR_POSITIVE);
}
从左上角到右下角展开窗口

private void button2_Click(object sender, EventArgs e)
{
animateForm = new Form2();
WindowsEffects.AnimateWindow(animateForm.Handle, 3000, WindowsEffects.AW_HOR_POSITIVE ^ WindowsEffects.AW_VER_POSITIVE);
}
从中心展开窗口

private void button3_Click(object sender, EventArgs e)
{
animateForm = new Form2();
WindowsEffects.AnimateWindow(animateForm.Handle, 3000, WindowsEffects.AW_CENTER);
}










