browser 侵权问题
  • 如网站内容存在侵权行为
    请及时联系我们进行删除

browser 广告
browser 公告
  • 通知:《2Trio游戏盒》已暂停服务,如需继续使用请下载
    纽扣加加-www.buttonpp.com


    关于网站部分程序无法使用

    随着时间的流失,部分软件可能因为时间太长,导致下载后需要更新无法使用,请大家尽量下载最近日期的。


    本站软件来源以及说明

    本站软件来自网络收集以及游客投稿,由于大部分软件为非官方版本的第三方修改版软件,更新速度比不上官方版本,请见谅。大家请支持正版,购买注册,得到更好的正版服务。


    蓝奏云链接打不开

    比如:lanzous最后面的数字改成X即可


    为什么下的文件会报毒?

    很多时候下载的软件被杀毒软件拦截了,大部分软件都为易语言开发误报很正常。


    拒绝白嫖从我做起

    本站所有需要下载的资源都需要先在界面回复才能看到下载地址

C# 实现类似QQ的窗体在桌面边缘停靠和隐藏

Root
2022-02-16 / 0 评论 / 26 阅读 / 正在检测是否收录...

C# 实现类似QQ的窗体在桌面边缘停靠和隐藏

设计思路:
1.使用定时器(Timer)来监控鼠标位置和窗体位置,并实现窗体的停靠和隐藏
2.当鼠标拖动窗体时,窗体才有可能根据自身位置决定是否停靠
3.如果窗体四周没有接触到屏幕边缘则不会停靠
4.如果窗体最小化或最大化了则不存在停靠和隐藏
5.如果鼠标拖动窗体时,如果窗体很接近屏幕边缘则自动将其停靠在该边缘,例如窗体离屏幕顶部小于4个像素则自动将其停靠在顶部
6.窗体可以在桌面的左侧、右侧和顶部停靠和隐藏
7.如果既满足顶部停靠的条件又满足侧面停靠的条件,则规定其向侧面隐藏
8.当鼠标位于窗体内部时,窗体不会隐藏
9.当鼠标位于窗体外部,窗体根据自身的位置决定是否隐藏
10.所谓的隐藏实际上并不是真正的隐藏,而是将整个窗体移出屏幕,仅在屏幕边缘留出一小部分
11.所谓的显示隐藏窗体实际上并不是真正的显示,而是将窗体再次移入屏幕
12.(存在的问题)默认情况下当用户点击“显示桌面”,会使我们隐藏的窗体被最小化。显然这并不是我们想要的结果,该问题暂时保留

效果显示:
Test

 private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Interval = 200;
            AutoSideHideOrShow();
        }
 
        void AutoSideHideOrShow()
        {
            int sideThickness = 4;//边缘的厚度,窗体停靠在边缘隐藏后留出来的可见部分的厚度
 
            //如果窗体最小化或最大化了则什么也不做
            if (this.WindowState == FormWindowState.Minimized || this.WindowState == FormWindowState.Maximized)
            {
                return;
            }
 
            //如果鼠标在窗体内
            if (Cursor.Position.X >= this.Left && Cursor.Position.X < this.Right && Cursor.Position.Y >= this.Top && Cursor.Position.Y < this.Bottom)
            {
                //如果窗体离屏幕边缘很近,则自动停靠在该边缘
                if (this.Top <= sideThickness)
                {
                    this.Top = 0;
                }
                if (this.Left <= sideThickness)
                {
                    this.Left = 0;
                }
                if (this.Left >= Screen.PrimaryScreen.WorkingArea.Width - this.Width - sideThickness)
                {
                    this.Left = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
                }
            }
            //当鼠标离开窗体以后
            else
            {
                //隐藏到屏幕左边缘
                if (this.Left == 0)
                {
                    this.Left = sideThickness - this.Width;
                }
                //隐藏到屏幕右边缘
                else if (this.Left == Screen.PrimaryScreen.WorkingArea.Width - this.Width)
                {
                    this.Left = Screen.PrimaryScreen.WorkingArea.Width - sideThickness;
                }
                //隐藏到屏幕上边缘
                else if (this.Top == 0 && this.Left > 0 && this.Left < Screen.PrimaryScreen.WorkingArea.Width - this.Width)
                {
                    this.Top = sideThickness - this.Height; 
                }
            }
        }
0

评论 (0)

取消