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# 抓图服务的实现

    下面是详细的讲解。 C# 抓图服务的实现 用 C# 实现一个抓图服务是一个非常实用的功能。在一些需要截屏或者截图的场景中,它可以自动化这个过程,非常方便。这里将介绍用 C# 实现一个简单的抓图服务的过程,并提供两个示例说明。 准备工作 在 C# 中通过 System.Windows.Forms 命名空间中的 Screen 类可以实现抓屏功能。在实现抓图服务之…

    C# 2023年6月6日
    00
  • C# TreeView读取数据库简单实例

    C# TreeView读取数据库简单实例 本文将介绍如何在C#的WinForms应用程序中,使用TreeView控件读取数据库数据,并在TreeView节点中展示出来。我们以展示行政区划(省市县)为例子。 确定数据库 我们首先要确定用于存放数据的数据库。在本例中,我们使用MySQL数据库。 创建数据库 我们需要先创建一个数据库,并在其中创建一个表结构,用于存…

    C# 2023年6月2日
    00
  • 游戏开发之随机概率的选择算法

    游戏开发中,随机数算法是一个非常重要的部分,它常常被用来在游戏当中生成随机的事件、物品、角色属性等等。而其中选择算法则是如何从一个固定的集合中,按照一定的概率来随机选择一个目标的算法。 以下是游戏开发中常用的三种选择算法: 1. 等概率随机算法 这种算法是最简单的一种,它的实现原理是先生成一个 0-1 之间的随机数,然后将这个随机数乘以集合元素的个数,将结果…

    C# 2023年6月7日
    00
  • VisualStudio怎么设置粘贴时格式不变? vs粘贴时自动缩进的技巧

    当在VisualStudio中使用复制粘贴操作时,有时候会出现格式混乱的情况,这时候我们可以进行设置来使得粘贴时不改变格式。同时,还可以设置粘贴时自动缩进,方便代码的编写与阅读。 以下是VisualStudio设置粘贴时格式不变或自动缩进的方法: 1. 设置粘贴时格式不变 步骤: 打开VisualStudio,进入“工具”菜单,选择“选项”。 在弹出的“选项…

    C# 2023年6月6日
    00
  • 带着问题读CLR via C#(笔记二)类型基础

    首先,你需要明确CLRviaC#是一本深入CLR和C#的书籍,针对读者提出了一系列问题,通过深入讲解各种类型的基础知识来解答这些问题。因此,想要完整掌握CLRviaC#,需要掌握以下几个步骤: 1. 阅读笔记前先阅读CLRviaC#原著 CLRviaC#是一本非常优秀的书籍,但它也是非常深入的一本书籍。为了能够真正理解笔记,你需要先阅读原著,并掌握其中的主要…

    C# 2023年5月15日
    00
  • C# Path.GetDirectoryName()方法: 获取指定路径的目录信息

    C#的Path.GetDirectoryName()方法 在C#中,Path.GetDirectoryName()是一个用于获取给定路径的目录信息的方法。 具体来说,Path.GetDirectoryName()返回指定路径中的目录信息,即该路径的目录路径(不包括文件名)。 使用方法 Path.GetDirectoryName()方法接收一个字符串参数,该参…

    C# 2023年4月19日
    00
  • 解析ASP.NET Core中Options模式的使用及其源码

    解析ASP.NET Core中Options模式的使用及其源码攻略 ASP.NET Core中Options模式是一种用于配置应用程序的机制。在本攻略中,我们将深入讨Options模式的使用及其源码,并提供两个示例说明。 Options模式的使用 在ASP.NET Core中,Options模式是一种用于配置应用程序的机制。Options模式允许您将配置数据…

    C# 2023年5月17日
    00
  • C#使用虚拟方法实现多态

    下面是详细讲解“C#使用虚拟方法实现多态”的攻略。 什么是多态 多态是面向对象编程中一个重要的概念,指的是同一个方法调用在不同的情况下会产生不同的结果。 C#中多态的实现 C#中实现多态的方式主要有两种,一种是使用虚拟方法,另一种是使用接口。 使用虚拟方法实现多态 使用虚拟方法实现多态的过程主要有以下几步: 定义一个父类,其中包含一个虚拟方法。虚拟方法是指可…

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