C# 学习笔记(10)加速球

Posted 不咸不要钱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 学习笔记(10)加速球相关的知识,希望对你有一定的参考价值。

C# 学习笔记(10)加速球

利用窗体透明和GIF透明背景,实现加速球类似效果(QQ宠物,老年人大概也知道)
本文参考C#仿PS异形启动界面设计https://www.bilibili.com/video/BV1zE411W7jU?t=178
在这里插入图片描述

  1. 新建一个工程winForm工程
  2. 设置窗体属性

设置窗体大小(和你找的GIF大小相同即可)
设置窗体出现位置(屏幕中心)
设置窗体不会出现在任务栏上
设置窗体在桌面最顶层(不会被其他应用程序界面遮住)
设置窗体背景透明色(和窗体背景色一样)
设置窗体格式(无边框)
在这里插入图片描述
这时窗体就是一个白板
在这里插入图片描述

  1. 添加控件label(只有label可以直接让GIF动态显示)

将label控件的自动大小属性关掉
设置label控件的位置和大小(大于等于GIF大小)
设置label控件的背景图片(一定要是透明背景的GIF(不是白色背景是透明背景的))
将文本属性设置为空
在这里插入图片描述

  1. 点击运行,就会出现一个和加速球效果类似的悬浮窗

但是现在还有一些问题:

  1. 运行后无法移动位置
  2. 鼠标移上去后想要切换动作
  3. 打开后不能关闭
  1. 添加鼠标事件,运行后可以拖动

选中label控件,给label添加鼠标按下事件、移动事件和弹起事件
在这里插入图片描述

/// <summary>
/// 记录鼠标按下坐标
/// </summary>
Point startPoint = new Point();
/// <summary>
/// 记录鼠标左键是否已经按下
/// </summary>
bool isDown = false;
/// <summary>
/// 鼠标按下回调函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void labGIF_MouseDown(object sender, MouseEventArgs e)
{
    //左键按下 记住按下坐标
    if(e.Button is MouseButtons.Left)
    {
        startPoint = e.Location;
        isDown = true;
    }
    
}
/// <summary>
/// 鼠标弹起回调函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void labGIF_MouseUp(object sender, MouseEventArgs e)
{
    //左键弹起 清除按下标志位
    if (e.Button is MouseButtons.Left)
    {
        isDown = false;
    }
}
/// <summary>
/// 鼠标在控件上移动回调函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void labGIF_MouseMove(object sender, MouseEventArgs e)
{
    //左键移动 修改窗体坐标
    if (e.Button is MouseButtons.Left && isDown)
    {
        this.Location = this.PointToScreen(new Point(e.X - startPoint.X, e.Y - startPoint.Y));
    }
}
  1. 鼠标放到窗体上,更换GIF效果

选中label控件,给label添加MouseEnter事件和MouseLeave事件
就是当鼠标进入控件时,给label换一张背景图
当然也可以自己添加一些其他的,比如双击或者什么的
在这里插入图片描述

        /// <summary>
        /// 当鼠标划过 更换gif
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void labGIF_MouseEnter(object sender, EventArgs e)
        {
            labGIF.Image = Properties.Resources.鼠标滑过;
        }

        /// <summary>
        /// 当鼠标离开控件 更换GIF
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void labGIF_MouseLeave(object sender, EventArgs e)
        {
            labGIF.Image = Properties.Resources.正常状态;
        }
  1. 退出程序

拖一个右键菜单到窗体上
在这里插入图片描述
将刚才拖的右键菜单和label关联起来
在这里插入图片描述
给右键菜单注册单击事件
在这里插入图片描述

private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.Close();
}

源码地址https://github.com/mian2018/CSharp_TransparentForm

以上是关于C# 学习笔记(10)加速球的主要内容,如果未能解决你的问题,请参考以下文章

C#程序员经常用到的10个实用代码片段 - 操作系统

学习笔记:python3,代码片段(2017)

是否可以动态编译和执行 C# 代码片段?

C#程序员经常用到的10个实用代码片段

跪球电脑高手帮忙了(在线等!!)

C#学习笔记-输入数据判断(intdoublestring)