C#模拟MSN窗体抖动的实现代码

C#模拟MSN窗体抖动的实现代码一般可以采用以下三个步骤:

1.获取窗体当前位置,并定义抖动偏移量;

2.在一定时间内不断改变窗体位置,实现抖动效果;

3.在抖动结束后恢复原始窗体位置。

具体实现步骤如下:

第一步:获取窗体当前位置和定义抖动偏移量

//获取窗口当前位置
Point OldPoint = this.Location;
//定义抖动偏移量,根据需求自定义抖动程度
int Offset = 8;

第二步:循环改变窗口位置,实现抖动效果

//定义变量记录循环次数
int ShakingTime = 0;
//定义抖动时间间隔
int ShakingInterval = 20;
//定义抖动次数,根据需求自定义抖动次数
int ShakingCount = 10;

while (ShakingTime < ShakingCount)
{
    //同步刷新窗口位置
    this.Location = new Point(OldPoint.X + Offset, OldPoint.Y + Offset);

    //等待一定时间间隔后恢复原始位置
    System.Threading.Thread.Sleep(ShakingInterval);
    this.Location = OldPoint;
    System.Threading.Thread.Sleep(ShakingInterval);

    //累加循环次数
    ShakingTime++;
}

第三步:恢复原始窗口位置

this.Location = OldPoint;

以上就是C#模拟MSN窗体抖动的完整攻略。

下面附上两条示例代码,第一条是在WinForm窗体的Load事件中点击button1按钮时触发抖动效果,第二条是在WPF程序中通过重写OnSourceInitialized方法实现窗体抖动效果:

示例1(WinForm):

private void button1_Click(object sender, EventArgs e)
{
    //获取窗口当前位置
    Point OldPoint = this.Location;
    //定义抖动偏移量
    int Offset = 8;
    //定义变量记录循环次数
    int ShakingTime = 0;
    //定义抖动时间间隔
    int ShakingInterval = 20;
    //定义抖动次数
    int ShakingCount = 10;

    while (ShakingTime < ShakingCount)
    {
        //同步刷新窗口位置
        this.Location = new Point(OldPoint.X + Offset, OldPoint.Y + Offset);

        //等待一定时间间隔后恢复原始位置
        System.Threading.Thread.Sleep(ShakingInterval);
        this.Location = OldPoint;
        System.Threading.Thread.Sleep(ShakingInterval);

        //累加循环次数
        ShakingTime++;
    }

    //恢复原始窗口位置
    this.Location = OldPoint;
}

示例2(WPF):

protected override void OnSourceInitialized(EventArgs e)
{
    base.OnSourceInitialized(e);
    //获取窗口句柄
    IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
    //定义抖动偏移量
    int Offset = 8;
    //定义变量记录循环次数
    int ShakingTime = 0;
    //定义抖动时间间隔
    int ShakingInterval = 20;
    //定义抖动次数
    int ShakingCount = 10;
    //获取窗口矩形
    Rect rect = new Rect();
    GetWindowRect(hwnd, ref rect);
    Point OldPoint = new Point(rect.Left, rect.Top);

    while (ShakingTime < ShakingCount)
    {
        //同步刷新窗口位置
        SetWindowPos(hwnd, IntPtr.Zero, (int)(OldPoint.X + Offset), (int)(OldPoint.Y + Offset), (int)rect.Width, (int)rect.Height, SWP_NOOWNERZORDER | SWP_NOZORDER);

        //等待一定时间间隔后恢复原始位置
        System.Threading.Thread.Sleep(ShakingInterval);
        SetWindowPos(hwnd, IntPtr.Zero, (int)OldPoint.X, (int)OldPoint.Y, (int)rect.Width, (int)rect.Height, SWP_NOOWNERZORDER | SWP_NOZORDER);
        System.Threading.Thread.Sleep(ShakingInterval);

        //累加循环次数
        ShakingTime++;
    }

    //恢复窗口原始位置
    SetWindowPos(hwnd, IntPtr.Zero, (int)OldPoint.X, (int)OldPoint.Y, (int)rect.Width, (int)rect.Height, SWP_NOOWNERZORDER | SWP_NOZORDER);
}

[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle);

[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

private const uint SWP_NOOWNERZORDER = 0x0200;
private const uint SWP_NOZORDER = 0x0004;

private struct Rect
{
    public int Left;
    public int Top;
    public int Right;
    public int Bottom;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#模拟MSN窗体抖动的实现代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#关键字in、out、ref的作用与区别

    下面我将针对C#关键字in、out、ref的作用与区别给出详细讲解,以便读者更好地理解和掌握这些关键字。 1. in关键字 1.1 概述 在C#中,in是一个定义方法参数的修饰符。当使用in修饰符声明一个方法的参数时,该参数将作为输入参数传递给方法,并且该参数的值不能被方法修改。 1.2 示例说明 下面是一个使用in修饰符声明方法参数的示例: class P…

    C# 2023年6月7日
    00
  • ASP.NET Core MVC中的视图(Views)

    ASP.NET Core MVC中的视图(Views)是一项非常重要的功能,可以将网站的前端页面和后端数据交互结合在一起。下面是一份完整攻略,从基础知识开始,逐渐深入,包括示例说明。 什么是视图(Views)? ASP.NET Core MVC中的视图(Views)就像一个网站的HTML页面,它们被用来描述和呈现用户看到的内容。视图一般是网站的前端页面,负责…

    C# 2023年5月31日
    00
  • 电脑英文缩写大全

    为了让大家更好地了解“电脑英文缩写大全”的完整攻略,我将分为以下几个部分进行讲解: 1. 收集电脑英文缩写 首先,我们需要收集电脑英文缩写。可以从各种渠道去收集,比如: 在网上搜索相关的英文缩写资料; 浏览电脑文章、手册、技术文档等,注意其中使用的缩写; 参考行业内广泛流传的缩写资料,如IEEE 802.11、ISO 9660等。 收集到英文缩写之后,需要对…

    C# 2023年6月8日
    00
  • .Net 6简介并和之前版本写法做对比

    以下是“.Net 6简介并和之前版本写法做对比”的完整攻略。 什么是.Net 6? .Net 6是微软推出的一种跨平台开发框架,它可以用于构建Windows、Linux、macOS以及用于云的应用程序。与之前的版本相比,.Net 6具有更高的性能、更强的安全性以及更多的易用性。它还包括很多新的特性和改进,比如Web、Desktop和移动应用程序的改进,以及新…

    C# 2023年6月3日
    00
  • C#中的==运算符

    当我们在C#中使用“==”运算符时,它主要用于比较两个值或者引用类型对象是否相等。 在C#中,基础类型如int、double、bool等都是值类型,使用“==”运算符时会比较它们的值是否相等,例如: int a = 1; int b = 1; bool result = a == b; // result为true,因为a和b的值相等 而引用类型如strin…

    C# 2023年5月14日
    00
  • .NET Core API之格式化输出对象OutputFormatter

    下面是详细的“.NET Core API之格式化输出对象OutputFormatter”的攻略。 1. OutputFormatter是什么? OutputFormatter是ASP.NET Core MVC框架中的一个组件,用于将响应数据对象序列化为HTTP响应内容。ASP.NET Core MVC框架中提供了多种不同格式的OutputFormatter,…

    C# 2023年6月3日
    00
  • 如何从dump文件中提取出C#源代码

    下面是从dump文件中提取C#源码的完整攻略: 一、准备工作 首先需要将dump文件转换成可读取的文件。这可以通过使用Debugging Tools for Windows中的cdb.exe来完成。在命令行中运行以下命令进行转换: cdb -z dumpfile.dmp -logo outfile.txt -c ".cordll -ve -u -l…

    C# 2023年5月15日
    00
  • 微信扫码支付(PC端)

    当用户在PC端想要进行微信支付时,可以选择使用微信扫码支付(PC端)。本文将为大家提供一个完整的攻略,以帮助大家完成微信扫码支付(PC端)过程。 第一步:开通微信支付商户号 要进行微信扫码支付,第一步必须是开通微信支付商户号。开通商户号的步骤如下: 进入微信支付官网,使用微信号登录。 在“商户信息”菜单中,选择“账户中心”,点击“商户注册”。 根据实际情况填…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部