WinForm窗体程序 主窗体开启和关闭动画效果

第一种方法,在屏幕下方缓缓出来,又缓缓关闭,这类效果自然使用原生态的API最合适不过了

核心代码:

/// <summary>
/// 窗体动画函数
/// </summary>
/// <param name="hwnd">指定产生动画的窗口的句柄</param>
/// <param name="dwTime">指定动画持续的时间</param>
/// <param name="dwFlags">指定动画类型,可以是一个或多个标志的组合。</param>
/// <returns></returns>
[DllImport("user32")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);

//下面是可用的常量,根据不同的动画效果声明自己需要的
private const int AW_HOR_POSITIVE = 0x0001;//自左向右显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志
private const int AW_HOR_NEGATIVE = 0x0002;//自右向左显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志
private const int AW_VER_POSITIVE = 0x0004;//自顶向下显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志
private const int AW_VER_NEGATIVE = 0x0008;//自下向上显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志该标志
private const int AW_CENTER = 0x0010;//若使用了AW_HIDE标志,则使窗口向内重叠;否则向外扩展
private const int AW_HIDE = 0x10000;//隐藏窗口
private const int AW_ACTIVE = 0x20000;//激活窗口,在使用了AW_HIDE标志后不要使用这个标志
private const int AW_SLIDE = 0x40000;//使用滑动类型动画效果,默认为滚动动画类型,当使用AW_CENTER标志时,这个标志就被忽略
private const int AW_BLEND = 0x80000;//使用淡入淡出效果

  调用代码(将窗体的FormBorderStyle属性设置为none):

  /// <summary>
  ///  窗体加载事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
   //从屏幕右下角出来
   int x = Screen.PrimaryScreen.WorkingArea.Right - this.Width;
   int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;

   //从屏幕下方任务栏开始上升到屏幕中央
   //int x = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
   //int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;

  //从屏幕下方开始上升到屏幕中上方
  //int x = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
  // int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Width;  

   this.Location = new Point(x, y);//设置窗体在屏幕右下角显示
   AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_ACTIVE | AW_VER_NEGATIVE);
}


/// <summary>
  ///  窗体关闭事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   AnimateWindow(this.Handle, 1000, AW_BLEND | AW_HIDE);
}

第二种方法,主窗体居中并且主窗体淡入淡出的特效

using System.Runtime.InteropServices;
 public class Win32
 {
  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; //若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。
  public const Int32 AW_HIDE = 0x00010000; //隐藏窗口,缺省则显示窗口。
  public const Int32 AW_ACTIVATE = 0x00020000; //激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
  public const Int32 AW_SLIDE = 0x00040000; //使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
  public const Int32 AW_BLEND = 0x00080000; //使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
  [DllImport("user32.dll", CharSet = CharSet.Auto)]
  public static extern bool AnimateWindow(
    IntPtr hwnd, // handle to window
    int dwTime, // duration of animation
    int dwFlags // animation type
    );
 }
  /// <summary>
  ///  窗体加载事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
 /**//*淡入窗体*/
 private void Form_Load(object sender, EventArgs e)
 {
  Win32.AnimateWindow(this.Handle, 2000, Win32.AW_BLEND);
 }

  /// <summary>
  ///  窗体关闭事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
 /**//*淡出窗体*/
 private void Form_FormClosing(object sender, FormClosingEventArgs e)
 {
  Win32.AnimateWindow(this.Handle, 2000, Win32.AW_SLIDE | Win32.AW_HIDE | Win32.AW_BLEND);
 }

出自:https://www.cnblogs.com/mq0036/p/6421946.html

第三种方法:启用主窗体,特效动画从中心点向四周展开显示窗体,关闭窗体特效动画从四周收缩回中心点关闭窗体

核心代码

//定义变量
bool flag = false;

//在窗体构造函数里面给变更赋初始值
public Form3()
  {
   InitializeComponent();
   flag = true;
 }

#region user32.dll
        //导入user32.dll
        [System.Runtime.InteropServices.DllImport("user32")]
        //声明API函数
        private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
        #endregion
        #region 常量
        //正面_水平方向
        const int AW_HOR_POSITIVE = 0x0001;
        //负面_水平方向
        const int AW_HOR_NEGATIVE = 0x0002;
        //正面_垂直方向
        const int AW_VER_POSITIVE = 0x0004;
        //负面_垂直方向
        const int AW_VER_NEGATIVE = 0x0008;
        //由中间四周展开或
        const int AW_CENTER = 0x0010;
        //隐藏对象
        const int AW_HIDE = 0x10000;
        //显示对象
        const int AW_ACTIVATE = 0x20000;
        //拉幕滑动效果
        const int AW_SLIDE = 0x40000;
        //淡入淡出渐变效果
        const int AW_BLEND = 0x80000;
        #endregion
        #region 判断方向
        public int IsHorOrVer(int pos)
        {
            int rtn = 0;
            //判断是正方向还是反方向
            if (pos.Equals(0))
            {
                //判断是横向还是纵向
                if (flag)
                    rtn = AW_HOR_POSITIVE;
                else rtn = AW_VER_POSITIVE;
            }
            else if (pos.Equals(1))
            {
                //判断是横向还是纵向
                if (flag)
                    rtn = AW_HOR_NEGATIVE;
                else rtn = AW_VER_NEGATIVE;
            }
            return rtn;
        }
#endregion

/// <summary>
  ///  窗体加载事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
 /**//*淡入窗体*/
 private void Form_Load(object sender, EventArgs e)
 {
   //动画——窗体由中心向四周扩展
   AnimateWindow(this.Handle, 1000, AW_CENTER | AW_ACTIVATE | IsHorOrVer(0)); 
 }

  /// <summary>
  ///  窗体关闭事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
 /**//*淡出窗体*/
 private void Form_FormClosing(object sender, FormClosingEventArgs e)
 {
  //动画——窗体由四周向中心缩小直至消失
   AnimateWindow(this.Handle, 1000, AW_CENTER | AW_HIDE | IsHorOrVer(1));
 }

特效代码,根据个人爱好使用,替换掉加载和关闭事件里面的即可:

   //动画——窗体向上拖拉
   AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_HIDE | IsHorOrVer(1));
   //动画——窗体向下拖拉
   AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_ACTIVATE | IsHorOrVer(0));
   //动画——窗体淡出特效
   AnimateWindow(this.Handle, 1000, AW_BLEND | AW_HIDE | IsHorOrVer(1));
   //动画——窗体淡入特效
   AnimateWindow(this.Handle, 1000, AW_BLEND | AW_ACTIVATE | IsHorOrVer(0));
   //动画——窗体由四周向中心缩小直至消失
   AnimateWindow(this.Handle, 1000, AW_CENTER | AW_HIDE | IsHorOrVer(1));
   //动画——窗体由中心向四周扩展
   AnimateWindow(this.Handle, 1000, AW_CENTER | AW_ACTIVATE | IsHorOrVer(0));

出自:https://www.jb51.net/article/71862.htm

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值