C#实现仿QQ窗口靠边自动隐藏

本文介绍了一个使用C#实现的QQ窗口自动隐藏功能,通过设置三个计时器来监控鼠标位置和窗口位置,当窗口靠近屏幕上方时自动隐藏,鼠标离开后则恢复显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今晚做网络通讯的实验,想实现下类似QQ滴窗口靠近屏幕上方自动隐藏,上网搜了下代码,发现这个比较简单,而且又很好的实现了所需功能,特记录如下,主要用了三个计时器来实现,开始时设置计时器1启用,计时器2 和计时器3禁用,代码很简单但很强大:

/* 其中全局变量:private bool isHiding = false;
            private int startY = 0;*/
        /// <summary>
        /// 监控鼠标和窗口位置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            int mouse_x = Cursor.Position.X,mouse_y = Cursor.Position.Y;/*鼠标当前位置*/
            int window_x = this.Location.X,window_y = this.Location.Y;/*窗体当前位置*/
            int window_width = this.Size.Width,window_height = this.Size.Height;/*窗体宽度高度*/
            if (isHiding == false && window_y == 0)/*如果窗体靠近上边缘且未隐藏*/
            {
                if (window_x - mouse_x > 10 || mouse_x - window_x - window_width > 10
                    || mouse_y - window_y - window_height > 10)/*如果鼠标位于窗体之外*/
                {
                    timer1.Enabled = false;
                    timer2.Enabled = true;
                }
            }
            if (isHiding == true && mouse_y <= 1 && mouse_x > window_x && /*窗体已隐藏且鼠标位于窗体范围内*/
                mouse_x < window_x + window_width)
            {
                timer1.Enabled = false;
                timer3.Enabled = true;
            }
        }
        /// <summary>
        /// 隐藏界面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer2_Tick(object sender, EventArgs e)
        {
            int window_height = this.Size.Height;//窗体高度
            startY += window_height / 10;
            if (startY < window_height)
            {
                /*产生连续滴效果*/
                this.Location = new Point(this.Location.X, -startY);

            }
            else
            {
                this.Location = new Point(this.Location.X, 1 - window_height);/*设置窗体在屏幕上的显示的高度为1像素*/
                isHiding = true;
                timer2.Enabled = false;
                timer1.Enabled = true;
            }
        }
        /// <summary>
        /// 显示界面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer3_Tick(object sender, EventArgs e)
        {
            int window_height = this.Size.Height;//窗体高度
            startY -= window_height / 10;
            if (startY > 0)
            {
                this.Location = new Point(this.Location.X, -startY);
            }
            else
            {
                this.Location = new Point(this.Location.X, 0);/*窗体完全在屏幕上显示*/
                isHiding = false;
                timer3.Enabled = false;
                timer1.Enabled = true;
            }
        }

如果你需要完整实现源代码,请移步: http://download.youkuaiyun.com/detail/lgd_yyf/4434075#comment这个是原作者滴代码,

另外,如果有需要,也可以参考这篇文章:http://blog.youkuaiyun.com/crystal_lz/article/details/8170491关于C#绘制qq好友列表控件),比较好的绘制了QQ好友列表的控件,可以直接引用作者的dll文件O(∩_∩)O哈哈~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值