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日

相关文章

  • WinForm实现鼠标拖动控件跟随效果

    为了实现WinForm中的鼠标拖动控件跟随效果,我们需要使用下述步骤: 1. 获取鼠标位置 鼠标在界面上移动时,我们需要获取其当前位置。可以通过下面的代码来获取: private void panel1_MouseMove(object sender, MouseEventArgs e) { Point point = Control.MousePositi…

    C# 2023年6月1日
    00
  • asp.net下出现其中的组件“访问被拒绝”的解决方法

    针对“asp.net下出现其中的组件‘访问被拒绝’的解决方法”这个问题,可以采用以下步骤进行处理: 1. 确认权限设置 “访问被拒绝”的错误提示通常是由于组件权限设置问题所引起的。因此,需要首先检查相关的权限设置是否正确。 在文件资源管理器中,找到涉及的组件所在的文件夹。 右键单击该文件夹,选择“属性”。 点击“安全”选项卡,确保当前用户(或组)具有相关的权…

    C# 2023年5月31日
    00
  • Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作

    Unity3D获取当前键盘按键: Unity3D中获取当前键盘按键可以通过Input.GetKey(),Input.GetKeyDown(),Input.GetKeyUp()三个函数来实现。 其中,Input.GetKeyDown()用于检测用户是否按下某个键,如果是则返回true,否则返回false。而Input.GetKeyUp()用于检测用户是否松开某…

    C# 2023年6月3日
    00
  • C# Directory.Exists(string path):判断指定路径的目录是否存在

    Directory.Exists(string path)是C#中用来判断指定目录是否存在的方法。 它的返回值是bool类型,true表示目录存在,否则表示目录不存在。 使用该方法的完整攻略如下:1. 确定需要判断的目录路径,可以是绝对路径或者相对路径。2. 使用Directory.Exists(string path)方法对目录进行判断。3. 根据返回值来…

    C# 2023年4月19日
    00
  • C#委托与事件原理及实例解析

    C#委托与事件原理及实例解析 委托 委托是一种类型,它可以用来表示对一个或多个方法的引用。在计算机中,委托的本质就是一个类,它可以包含方法的引用或者函数指针,并允许在运行时将方法指定给委托,以便在需要时调用该方法。 委托的定义 使用 delegate 关键字来声明一个委托类型,例如: public delegate void MyDelegate(strin…

    C# 2023年6月3日
    00
  • 基于C#实现图片合成功能

    非常感谢您对图片合成功能的关注。本站准备为您提供基于C#的图片合成功能完整攻略。下面我们将带领您详细了解如何实现这一功能。 步骤一:创建C#项目 首先,我们需要在 Visual Studio 中创建一个名为 ImageMerge 的C#项目作为我们的示例进行演示。 步骤二:引用命名空间 在使用图形处理命令前,请首先引用System.Drawing.Imagi…

    C# 2023年6月6日
    00
  • C#自定义简化cookie类实例

    下面是C#自定义简化cookie类实例的完整攻略: 什么是cookie? 在Web开发中,服务器可以通过设置一个被浏览器保存的cookie给指定用户,在后续的用户请求时进行识别,在保持用户状态、实现一些个性化操作等方面发挥重要作用。 C#中的cookie类 在C#中,可以使用System.Net.Cookie类来表示cookie。一般情况下,我们需要设置co…

    C# 2023年5月31日
    00
  • .Net Core解决WebAPI中返回时间格式带T的问题

    下面我将为您介绍“.Net Core解决Web API中返回时间格式带T的问题”的完整攻略,包括问题背景、原因分析、解决方案及相应示例说明。 问题背景 在使用 .NET Core Web API 开发 Web 服务时,经常会遇到日期时间格式带T的问题。例如,返回的时间格式可能会长成 2021-01-01T00:00:00 的样子。这种时间格式对于人来说不太友…

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