QQ揭秘:如何实现窗体靠边隐藏?【低调赠送:QQ高仿版GG 4.2 最新源码】

您所在的位置:网站首页 qq的性别怎么隐藏起来了 QQ揭秘:如何实现窗体靠边隐藏?【低调赠送:QQ高仿版GG 4.2 最新源码】

QQ揭秘:如何实现窗体靠边隐藏?【低调赠送:QQ高仿版GG 4.2 最新源码】

2024-07-13 19:41| 来源: 网络整理| 查看: 265

      QQ有个靠边隐藏的功能,使用起来很方便:在屏幕上拖动QQ的主窗体,当窗体的上边沿与屏幕的上边沿对齐时,主窗体就会duang~~地隐藏起来,当将鼠标移到屏幕上边沿的对应区域时,主窗体又会duang~~显示出来。

  我在GG的最新版4.2中也增加了靠边隐藏的功能,支持靠左边沿隐藏、靠上边沿隐藏、靠右边沿隐藏三种模式,并且,将靠边隐藏实现为了一个可复用的组件AutoDocker。

      那么,靠边隐藏功能到底是怎么实现的了?(最初实现的过程中,遇到了很多问题,花了不少时间,现在直接把成果共享出来)

      想要直接下载体验的朋友请点击:“下载中心”

一.靠边隐藏的原理

      靠边隐藏的本质实际上并不是将窗体的Visiable设为false,而是将整个窗体的位置挪到屏幕区域之外。比如,靠右边沿隐藏,实际的效果图如下所示:

     

     方案说明如下:

(1)当拖动窗体在屏幕上移动时,检测窗体的位置,是否抵达了屏幕的边界,如果达到了边界,则准备靠边隐藏。

(2)当达到了隐藏条件,并且鼠标的光标已经离开了主窗体,则实现隐藏。

(3)窗体隐藏后,当鼠标的光标移动到窗体与屏幕相交的边界位置时,则正常显示窗体;之后:

        a. 当鼠标再度离开窗体区域,则又隐藏窗体。

        b.如果鼠标拖动窗体改变了其位置,使其不再满足隐藏的条件,则之后一直正常显示窗体。

二.具体实现过程 1.基本元素定义

  首先,我们需要定义靠边隐藏的类型:靠左、靠上、靠右。使用DockHideType枚举表示:

/// /// 靠边隐藏的类型。 /// public enum DockHideType { /// /// 不隐藏 /// None = 0, /// /// 靠上边沿隐藏 /// Top, /// /// 靠左边沿隐藏 /// Left, /// /// 靠右边沿隐藏 /// Right }

        其次,根据上面的原理描述,我们知道窗体有三种状态:正常显示、准备隐藏、已经隐藏。这三种状态使用FormDockHideStatus枚举表示:

/// /// 窗体的显示或隐藏状态 /// public enum FormDockHideStatus { /// /// 已隐藏 /// Hide = 0, /// /// 准备隐藏 /// ReadyToHide, /// /// 正常显示 /// ShowNormally } 2.判断是否达到隐藏条件

  很明显,我们应当在每次窗体的位置发生变化时,做出这样的判断,所以,这个判断应该在Form的LocationChanged事件中调用。

private void dockedForm_LocationChanged(object sender, EventArgs e) { this.ComputeDockHideType(); if (!this.IsOrg) { this.lastBoard = this.dockedForm.Bounds; this.IsOrg = true; } } /// /// 判断是否达到了隐藏的条件?以及是哪种类型的隐藏。 /// private void ComputeDockHideType() { if (this.dockedForm.Top


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3