wpf、winform仿QQ靠边隐藏

先说下下面的代码和demo是wpf的,如果winform要用,改动不大的。

 

实现思路: 通过定时刷新鼠标位置 和 窗体坐标 进行计算 来控制窗体的隐藏 显示 

 

代码都有详细的注释

 

复制代码
//窗体状态 true为显示 false为隐藏
        private bool IsHide = false;
        //鼠标状态 true为进入窗体 false为离开窗体
        private bool IsMouseEnter = false;
        //计时器 通过win32api实时获取鼠标位置
        private Timer timer;

        public MainWindow()
        {
            InitializeComponent();
            timer = new Timer();
            timer.Interval = 300;
            timer.Tick += new EventHandler(timer_Tick);
            
        }

        void timer_Tick(object sender, EventArgs e)
        {
            MousePosition.CurrentPoint point;
            MousePosition.MouseMove(out point);
           //判断鼠标是否进入窗体
            if (point.X >= this.Left && point.X <= this.Left + this.Width&&point.Y>=this.Top&&point.Y<=this.Top+this.Height)
            {
                //鼠标在窗体内部
                IsMouseEnter = true;
            }
            else
            {
                //鼠标离开窗体
                IsMouseEnter = false;
            }

            //判断窗体是否在隐藏状态
            if (IsHide)
            {
                //如果在隐藏状态 且 横坐标在窗体横坐标方位 纵坐标小于等于20 则显示窗体 并把窗体状态设置为显示
                if (point.X >= this.Left && point.X <= this.Left + this.Width)
                {
                    if (point.Y <= 20)
                    {
                        this.Top = 0;//显示窗体
                        IsHide = false;//把窗体状态设置为显示
                    }
                }
            }
            else
            {
                //如果在显示状态 且纵坐标小于等于20 切鼠标不在窗体内 则隐藏窗体

                if (this.Top <= 20 && !IsMouseEnter)
                {
                    this.Top = 0 - this.Width;//隐藏窗体
                    IsHide = true;
                }
            }
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            timer.Start();
        }
复制代码

 

作者:晓晨Master(李志强)

出处:https://www.cnblogs.com/stulzq/p/5455166.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   晓晨Master  阅读(2146)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示