用C#代码实现类似QQ窗体的“上、左、右”停靠功能
大家都知道QQ有一个自动停靠功能,即“上、左、右”,当你把窗体拖到屏幕边缘,然后移开鼠标它会自动缩放,然后只显示一小小点出来,我们仔细观察会发现其实它只露3像素左右的边缘,当你鼠标移上去它又会伸出来,介于普通入门级学者要求艾伟就在这里给需要的朋友们分享分享我是怎么实现的,代码很少,效果如下:

先在当前类里弄几个变量,方便逻辑判断:
QQ_MODE(用于记录窗体当前的停靠状态,即0为不停靠,1为X轴,2为Y轴,3为顶部),QQ_T(窗体缩放时显示出来的边缘大小),QQ_XY(鼠标坐标与窗体边缘多少像素时为可见区)
逻辑思考:如果鼠标左键在当前窗体按下时,无论窗体位置在哪,那么此窗体一定是显示的,并且可能为拖动状态,即不停靠;如果鼠标移到到窗口内或到移动到边缘差为QQ_XY内区域时窗体可见;当鼠标离开窗体时则判断是否满足伸缩的条件,即“上、左、右”,其中“上”为优先级;
再拖入窗体一个“timer”控件,关键的逻辑判断代码如下:

#region 类似QQ的收缩功能,逻辑实现代码
int QQ_MODE = , QQ_T = , QQ_XY = ;//0为不停靠,1为X轴,2为Y轴,3为顶部;QQ_T为显示的像素;QQ_XY为误差 private void timer1_Tick(object sender, EventArgs e) { //如果左键按下就不处理当前逻辑[是否收缩] if (MouseButtons == MouseButtons.Left) return;
//鼠标的位置 int x = MousePosition.X, y = MousePosition.Y;
//鼠标移动到窗口内,显示 if (x > (this.Location.X - QQ_XY) && x < (this.Location.X + this.Width + QQ_XY) && y > (this.Location.Y - QQ_XY) && y < (this.Location.Y + this.Height + QQ_XY)) { if (this.QQ_MODE == ) this.Location = new Point(QQ_T, this.Location.Y); else if (this.QQ_MODE == ) this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - this.Width - QQ_T, this.Location.Y); else if (this.QQ_MODE == ) this.Location = new Point(this.Location.X, QQ_T); } else//鼠标移动到窗口外,隐藏 { if (this.Location.Y <= QQ_T)//上 { this.Location = new Point(this.Location.X, QQ_T - this.Height); this.QQ_MODE = ; } else if (this.Location.X <= QQ_T)//左 { this.Location = new Point(QQ_T - this.Width, this.Location.Y); this.QQ_MODE = ; } else if (this.Location.X >= Screen.PrimaryScreen.WorkingArea.Width - this.Width - QQ_T)//右 { this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - QQ_T, this.Location.Y); this.QQ_MODE = ; } else this.QQ_MODE = ; } }
//移动窗体时,解决QQ逻辑 private void ToolsMenu_Move(object sender, EventArgs e) { this.QQ_MODE = ; }
#endregion
用C#代码实现类似QQ窗体的“上、左、右”停靠功能的更多相关文章
- 使用plupload做一个类似qq邮箱附件上传的效果
公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...
- C#利用API制作类似QQ一样的右下角弹出窗体
C#利用API制作类似QQ一样的右下角弹出窗体 (2009-03-21 15:02:49) 转载▼ 标签: 杂谈 分类: .NET using System;using System.Collecti ...
- 转 实现类似QQ的窗体停靠
[DllImport("User32.dll")] public static extern bool PtInRect(ref Rectangle Rects, Point lp ...
- WinForm实现类似QQ停靠,显示隐藏过程添加特效效果
原文:WinForm实现类似QQ停靠,显示隐藏过程添加特效效果 这可能是个老题长谈的问题了,只是在项目中会用到这个效果,所以今天做个记录.大家见了别喷我.在项目中的需求是这样的. 打开程序,在屏幕的右 ...
- .net winForm 实现类似qq 弹出新闻
.net winForm 实现类似qq 弹出新闻 一.背景: echong 之前一直用 公司大牛c语言写的一个弹出托管,前几天写东西的时候发现com调用不是那么好使.而手头上写的这个东西又是.ne ...
- C#如何实现类似QQ那样靠边隐藏的功能
http://www.cnblogs.com/yechensi/archive/2009/08/02/1537145.html C#如何实现类似QQ那样靠边隐藏的功能 你想过为自己的程序添加靠边隐藏的 ...
- android开发之ExpandableListView的使用,实现类似QQ好友列表
由于工作需要,今天简单研究了一下ExpandableListView,做了一个类似QQ列表的Demo,和大家分享一下. 效果图如下: 先来看看主布局文件: <RelativeLayout xml ...
- [C# 网络编程系列]专题九:实现类似QQ的即时通信程序
转自:http://www.cnblogs.com/zhili/archive/2012/09/23/2666987.html 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例 ...
- MVC实现类似QQ的网页聊天功能-ajax(下)
此篇文章主要是对MVC实现类似QQ的网页聊天功能(上)的部分代码的解释. 首先说一下显示框的滚动条置底的问题: 结构很简单一个大的div(高度一定.overflow:auto)包含着两个小的div第一 ...
随机推荐
- Grunt之watch详解
Grunt 之 watch 和 livereload 现在 watch 中已经集成了 livereload ,所以把它们放在一起说明. watch 可以监控特定的文件,在添加文件.修改文件.或者删除文 ...
- Yii 1.0 基础
骨架搭建 1.下载2.windows 创建PHP环境变量,找到php.exe的目录D:\wamp\bin\php\php5.3.5,右键我的电脑,属性\高级设置,path最后添加 ;D:\wamp\b ...
- 使用 StateServer 保存 Session 解决 Session过期,登陆过期问题。
使用 StateServer 保存 Session 正常操作情况下Session会无故丢失.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成60分钟,不会这 ...
- double减法不准确的那些事儿
CREATE TABLE `helei` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `num1` double DEFAULT NULL ...
- 基于Doubango的iOS客户端开源框架
一.ios-ngn-statck工程 1.Tests ---功能测试 2.底层模块(c和c++) Doubango --- 基于3GPP IMS/RCS 并能用于嵌入式和桌面系统的开源框架 1) ti ...
- spring EL表达式,null-safe表达式
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://ww ...
- oracle数据库包package小例子
为了把某一个模块的函数.存储过程等方便查询维护,可以把它们打到一个包里.下面给出一个简单的小例子. 1.创建包头 create or replace package chen_pack is func ...
- 20个常用的Java程序块
1.字符串有整型的相互转换 String a = String.valueOf(2);//integer to numeric string Int i = Integer.parseInt(a);/ ...
- tbl.js div实现的表格控件,完全免费,不依赖jquery
html上现在有比较好用的表格控件是datatable,但是编辑.按钮等部分是收费的,只有基础功能免费.而且尺寸发生变化时需要手工刷新等繁琐操作较多.所以我开发一个免费的供大家使用. 本项目已用于&q ...
- [nginx]Windows和Mac下,nginx反向代理服务器配置
最近做项目,前端需要用到nginx反向代理来转发请求,总结了一下在Windows和Mac上的配置,以备查询. 一.Windows 修改nginx的配置文件,nginx.conf. 1)nginx.co ...