实现原理:

  实现这个功能的原理步骤如下:

    1、判断窗体程序是否靠近桌面边缘;

    2、获取桌面屏幕大小与窗体程序大小;

    3、把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序;

    4、判断鼠标是否在窗体程序上,在就靠边显示整个窗体程序,不在就隐藏显示,并调为半透明转态。

 程序部分:

        int SH;
int SW;
int self_SH;
int self_SW;
int star_win_flag = ;//窗口初始化位置标志位,防止隐藏窗口后定时器重新跑窗口函数再次在初始化位置打开
private void Form1_Load(object sender, EventArgs e)
{
//获取显示器屏幕的大小,不包括任务栏、停靠窗口
SH = Screen.PrimaryScreen.WorkingArea.Height;
SW = Screen.PrimaryScreen.WorkingArea.Width;
//获取当前活动窗口高度跟宽度
self_SH = this.Size.Height;
self_SW = this.Size.Width;
if(star_win_flag==)
{
//设置窗口打开的位置为下方居中
SetDesktopLocation((SW - self_SW) / , SH - self_SH);
star_win_flag = ;
}
//============添加窗体所在位置定时检测=================
TopMost = true; //把窗体设置为最顶层
System.Windows.Forms.Timer MyTimer = new System.Windows.Forms.Timer();
MyTimer.Tick += new EventHandler(StopRectTimer_Tick);
MyTimer.Interval = ;
MyTimer.Enabled = true; }
        //=================隐藏窗体&显示部分==================
int check_flag = ; //窗体隐藏标志位,0为不开启隐藏功能,初始默认0
int win = ;
int frmX;
int frmY;
private void StopRectTimer_Tick(object sender, EventArgs e)
{
// 获取窗体位置
frmX = this.Location.X;
frmY = this.Location.Y; if (check_flag == )
{
//获取窗口的边沿与桌面的间距,判断窗口是否靠近边沿里面-1个位置
if (this.Left <= ) //获取控件左边沿与桌面左边沿的间距,窗口靠近左边桌面边沿
win = ;
else if (this.Top <= && this.Left > && this.Right < SW - )////获取控件上边沿与桌面上边沿的间距,窗口靠近顶端桌面边沿
win = ;
else if (this.Right >= SW) ////获取控件右边沿与桌面左边沿的间距,窗口靠近右边桌面边沿
win = ;
else //窗体没有靠近边沿
win = ; /* Cursor.Position获取当前鼠标的位置
* Bounds.Contains(Cursor.Position)获取鼠标位置是否在窗口边界里面,在返回ture
*如果鼠标在窗体上,则根据停靠位置显示整个窗体
*窗体边沿计算是以左边沿为主*/ if (Bounds.Contains(Cursor.Position))
{
switch (win)
{
case :
this.Opacity = 1.0f; //窗口恢复不透明状态
//窗体靠近左沿时,鼠标在窗体显示完整窗体
SetDesktopLocation(, frmY);
break;
case :
this.Opacity = 1.0f; //窗口恢复不透明状态
//窗体靠近顶部时,鼠标在窗体显示完整窗体
SetDesktopLocation(frmX, );
break;
case :
this.Opacity = 1.0f; //窗口恢复不透明状态
//窗体靠近右沿时,鼠标在窗体显示完整窗体
SetDesktopLocation(SW - self_SW, frmY);
break;
}
} //如果鼠标离开窗体,则根据停靠位置隐藏窗体(即把窗体显示出桌面以外),但须留出部分窗体边缘以便鼠标选中窗体,这里留7个位置
else
{
switch (win)
{
case :
this.Opacity = 0.2f; //窗口百分之80透明
//窗体靠近左沿时,鼠标不在窗体时隐藏
SetDesktopLocation( - self_SW, frmY);
break;
case :
this.Opacity = 0.2f; //窗体靠近顶部时,鼠标不在窗体时隐藏
SetDesktopLocation(frmX, - self_SH);
break;
case :
this.Opacity = 0.2f; //窗体靠近右沿时,鼠标不在窗体时隐藏
SetDesktopLocation(SW - , frmY);
break;
}
}
}
}
 /*==========窗体边沿隐藏功能开启选择框===========*/
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.CheckState == CheckState.Checked) //判断复选框选中 {
check_flag = ;
//if(win==0)//判断框功能选中时,判断窗口不在边沿时自动收到上边沿中间隐藏
{
this.Opacity = 0.2f; //窗口半透明
SetDesktopLocation((SW - self_SW) / , -SH );
} //MessageBox.Show("checkbox1 is checked\n" + checkBox1.Text); } else if (checkBox1.CheckState == CheckState.Unchecked) //判断复选框没选中 {
check_flag = ;
//MessageBox.Show("checkbox1 is Unchecked\n" + checkBox1.Text); }
}

隐藏结果:

  

    

C# 实现窗口程序winform像QQ一样靠近桌面边缘自动隐藏窗口的更多相关文章

  1. winform, 实现窗口程序像QQ一样靠近桌面边缘自动隐藏窗口

    实现原理: 步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是否在窗体程序上,在 ...

  2. C# 窗体靠近屏幕边缘自动隐藏*学习(类似于QQ)

    using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; us ...

  3. C# winform 实现 qq 在屏幕边缘 自动隐藏 鼠标移过去 移上去 又自动显示

    代码下载地址   http://download.csdn.net/detail/simadi/7677147

  4. 关闭Win10窗口拖动到桌面边缘自动缩放功能

  5. 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

    32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...

  6. win32程序之窗口程序,以及消息机制

    win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...

  7. (Delphi)第一个Windows 32 API的窗口程序

    program Project1; uses Winapi.Windows, Winapi.messages; {$R *.res} const className = 'MyDelphiWindow ...

  8. wpf仿qq边缘自动停靠,支持多屏

    wpf完全模仿qq边缘自动隐藏功能,采用鼠标钩子获取鼠标当前状态,在通过当前鼠标的位置和点击状态来计算是否需要隐藏. 以下是实现的具体方法: 一.鼠标钩子实时获取当前鼠标的位置和点击状态 /// &l ...

  9. Winform调用QQ发信息并且开机启动 (开源)

    前言 公司CS系统需要加入启动qq从winform调用qq聊天窗口的功能,前提是需要将聊天者的QQ号码作为参数传递到函数中,一直没有搞过,正好很感兴趣,就折腾,Winform调用qq,我想肯定是需要一 ...

随机推荐

  1. Problem 9

    Problem 9 # Problem_9.py """ A Pythagorean triplet is a set of three natural numbers, ...

  2. String与StringBuffer与StringBuilder

    package test; public class Test { public static void main(String[] args) { StringBuffer sb = new Str ...

  3. 前端框架Bootstrap简单介绍

    下载: 解压之后: 把这些文件拷贝到项目中 页面使用时  只需要引入: 然后我们就可以参考官网来设计需要的前端页面了 设计一个按钮:button 只需要标明css样式中使用的类  下面就是现实效果:

  4. BA-传感器

    01.室内温度传感器 壁装,西门子,QAA2061D 1.默认范围:温度0-50℃,湿度0-100% 2.供电方式:24vac 3.穿线方式:4芯屏蔽线 02.风管温度传感器 西门子,QAM2120. ...

  5. 洛谷 P1272 重建道路(树形DP)

    P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...

  6. [笔记][Java7并发编程实战手冊]3.4 等待多个并发事件的完毕CountDownLatch倒计数闭锁

    [笔记][Java7并发编程实战手冊]系列文件夹 简单介绍 本文学习CountDownLatch 倒计数闭锁. 本人英文不好.靠机器翻译,然后有一段非常形象的描写叙述,让我把它叫为倒计数 用给定的计数 ...

  7. Android 自己定义View学习(2)

    上一篇学习了基本使用方法,今天学一下略微复杂一点的.先看一下效果图 为了完毕上面的效果还是要用到上一期开头的四步 1,属性应该要有颜色,要有速度 <?xml version="1.0& ...

  8. HDU 5078 Revenge of LIS II(dp LIS)

    Problem Description In computer science, the longest increasing subsequence problem is to find a sub ...

  9. eclipse转Android studio遇到的那些坑

           公司项目有导入10多个libray,还有涉及ndk,转Android studio时碰到不少问题.前后大概花费5个工作日,中间各种奇葩bug,各种编译出错,非常多还有没错误提示.一度想过 ...

  10. SGU 531 - Bonnie and Clyde 预处理+二分

    Bonnie and Clyde Description Bonnie and Clyde are into robbing banks. This time their target is a to ...