winform右下角弹窗

本文介绍了如何在Winform应用中实现类似网页右下角弹窗的动画效果,提供了两种方法,一种通过调用user32.dll实现窗口的滑动与淡入淡出动画,另一种采用线程逐像素移动窗体位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网页是否经常在电脑右下角弹窗显示消息?其实Winform也是可以实现的。下面介绍两种方法。

第一步:设计窗体

第二步:实现代码

第一种方法

引用user32

声明常量

窗体Load事件

窗体FormClosing事件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[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; //使用淡入淡出效果
  
         private void Form1_Load( object sender, EventArgs e)
         {
             int x = Screen.PrimaryScreen.WorkingArea.Right - this .Width;
             int y = Screen.PrimaryScreen.WorkingArea.Bottom - this .Height;
             this .Location = new Point(x, y); //设置窗体在屏幕右下角显示
             AnimateWindow( this .Handle, 1000, AW_SLIDE | AW_ACTIVE | AW_VER_NEGATIVE);
         }
  
         private void Form1_FormClosing( object sender, FormClosingEventArgs e)
         {
             AnimateWindow( this .Handle, 1000, AW_BLEND | AW_HIDE);
  
         }

第二种方法

只要在窗体的初始化InitializeComponent()方法后面加上如下代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
InitializeComponent();
             Rectangle rectangle = Screen.AllScreens[0].WorkingArea;
             this .StartPosition = FormStartPosition.Manual;
             this .Location = new Point(rectangle.Width - this .Width, rectangle.Height);
             this .TopMost = true ;
             System.Threading.Thread thread = new System.Threading.Thread(() =>
             {
                 while ( this .Top >= rectangle.Height - this .Height)
                 {
                     this .Invoke( new MethodInvoker( delegate
                     {
                         this .Top = this .Top - 1;
                         System.Threading.Thread.Sleep(1);
                         Application.DoEvents();
                     }));
                 }
             });
             thread.Start();

转载于:https://www.cnblogs.com/dachuang/p/5707608.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值