c#轻松实现磁性窗口

/// <summary>
/// 磁性窗体函数
/// </summary>
/// <param name="form">窗体控件(一般传this即可)</param>
/// <param name="space">自定义的与屏幕边缘的距离</param>
/// <param name="isWorkingArea">是否在屏幕工作区进行该操作(true表示不包括任务栏,false则包括整个屏幕的范围)</param>
public void Form_Welt(Control form, int space, bool isWorkingArea)
{
//获取窗体的左上角的x,y坐标
int x = form.Location.X;
int y = form.Location.Y;

int sW = 0;
int sH = 0;

if (isWorkingArea)
{
//获取屏幕的工作区(不包括任务栏)的宽度和高度
sW = Screen.PrimaryScreen.WorkingArea.Width;
sH = Screen.PrimaryScreen.WorkingArea.Height;
}
else
{
//获取整个屏幕(包括任务栏)的宽度和高度
sW = Screen.PrimaryScreen.Bounds.Width;
sH = Screen.PrimaryScreen.Bounds.Height;
}

//如果窗体的左边缘和屏幕左边缘的距离在用户定义的范围内,则执行左贴边
if ((x <= space && x > 0) || (Math.Abs(x) <= space && x < 0)) //Math.Abs(x)是取绝对值
{
form.Location = new Point(0, y);
}

//如果窗体的上边缘和屏幕上边缘的距离在用户定义的范围内,则执行上贴边
if ((y <= space && y > 0) || (Math.Abs(y) <= space && y < 0))
{
form.Location = new Point(x, 0);
}

//窗体右边缘跟屏幕右边缘的距离
int rightW = sW - form.Right;
//窗体下边缘跟屏幕下边缘的距离
int bottomW = sH - form.Bottom;

//判断右边的情况
if ((rightW <= space && form.Right < sW) || (Math.Abs(rightW) <= space && rightW < 0))
{
form.Location = new Point(sW - form.Width, y);
}
//判断下边的情况
if ((bottomW <= 10 && form.Bottom < sH) || (Math.Abs(bottomW) <= space && bottomW < 0))
{
form.Location = new Point(x, sH - form.Height);
}
}

看到千千静听的窗口可以在接近屏幕边缘时贴在边缘上觉得不错,自己也有这个需要,所以写了这个方法,测试了感觉还蛮不错的,哈哈~
使用的时候只要在想应用的窗体的Form_Move(object sender,EventAges e)事件里面调用即可
ps:不过有时窗体可能会比较闪,这个可能是代码还有待改善,或者是在Form_Move事件里面来调用不大合适,反正功能是实现了,要是哪位有更好的方法,欢迎回复交流一下啊~

时间: 2024-08-08 13:49:35

c#轻松实现磁性窗口的相关文章

Win7窗口操作

1.使用 Aero Shake 晃动最小化打开的窗口您可以使用 Aero Shake 晃动将所有打开的窗口快速最小化,只剩下您需要使用的窗口.然后,还可以轻松还原所有窗口.操作方法如下:1. 在需要保持打开状态的窗口中,快速地来回拖动(或晃动)标题栏.2. 若要还原已最小化的窗口,请再次晃动打开的窗口.

windows的DOS窗口如何修改大小

关于这个问题,其实很简单.不知道为什么网上的资料乱遭的.故自己写下来,方便有不明白的童鞋参考. 左键点击左上角的区域会弹出一个菜单,选择属性. 如下图就能轻松的修改窗口的大小了.

GLUT去除控制台窗口

glut是OpenGL应用工具包(OpenGL Utility Toolkit),它为OpenGL提供了一个简易的窗口平台,使程序员不用过多的关心与平台相关的窗口系统.      建立工程时,我们一般都建立控制台程序(在vc6中即console win32 application)来使用glut库.但是在控制台程序下,运行时都会跳出控制台窗口,很不美观,我们可以用下面的方法将控制台窗口去掉:      #pragma comment(linker, "/subsystem:\"wind

【转】如何:排列和停靠窗口

原文网址:http://msdn.microsoft.com/zh-cn/library/vstudio/z4y0hsax(v=vs.110).aspx 如何:排列和停靠窗口 Visual Studio 2012 其他版本 1(共 1)对本文的评价是有帮助 - 评价此主题 集成开发环境 (IDE) 包含两种类型的窗口:工具窗口和文档窗口. 根据 IDE 中的窗口排列方式,可以调整代码的查看和编辑空间. 以下选项只是可用于排列窗口的一部分方式: 很好地锁定文档窗口左侧的选项卡. 以选项卡形式将窗口

BetterSnapTool for Mac(窗口管理工具)

BetterSnapTool for Mac特别版能自定义设置窗口大小,让您轻松管理窗口位置和大小,方法是将它们拖动到屏幕的一个角落或屏幕的顶部,左侧或右侧.这使您可以轻松地最大化窗口,并排放置它们,甚至可以将它们调整到屏幕的四分之一.此外,为了调整你想要的方式,你可以设置键盘快捷键. bettersnaptool允许您通过将窗口位置和大小拖动到屏幕的某个角落或屏幕的顶部.左侧或右侧来轻松管理窗口位置和大小.这使您可以方便地最大化窗口,并排放置,甚至将它们调整到屏幕的四分之一. 如果您需要的不仅

QT应用程序图标

QT生成在Windows下有图标的exe文件(IDE=QT Creator) 我个人十分喜爱QT Creator的IDE界面与操作,但是也许是尚未完全成熟或者是为了代码跨平台,有些功能并没有直接提供. 比如Windows下做软件,至少作为主程序或启动程序的exe文件一般都应该有自己的图标,QT Creator虽然可以轻松地设置窗口的小图标,但并没有提供设置exe文件图标的功能. 其实做起来并不难. ·首先当然要准备一个.ico图标文件(假定为myIcon.ico),将其复制到工程目录当中(.pr

Android 对话框 (AlertDialog)

Android 提供了 AlertDialog 类可通过其内部类 Builder 轻松创建对话框窗口,但是没法对这个对话框窗口进行定制,为了修改 AlertDialog 窗口显示的外观,解决的办法就是创建一个指定的 AlertDialog 和 AlertDialog.Builder 类. 定义外观 我们希望将上面默认的对话框外观修改为如下图所示的新对话框风格: 该对话框将支持下面特性: 可从资源或者字符串直接指定对话框标题 可从资源.字符串和自定义布局来设置对话框内容 可设置按钮和相应的事件处理

lintcode594 - strStr II - hard

Implement strStr function in O(n + m) time. strStr return the first index of the target string in a source string. The length of the target string is m and the length of the source string is n. If target does not exist in source, just return -1. Exam

php面试全套

7.mvc是什么?相互间有什么关系? 答:mvc是一种开发模式,主要分为三部分:m(model),也就是模型,负责数据的操作;v(view),也就是视图,负责前后台的显示;c(controller),也就是控制器,负责业务逻辑 客户端请求项目的控制器,如果执行过程中需要用到数据,控制器就会到模型中获取数据,再将获取到的数据通过视图显示出来 8.oop是什么? 答:oop是面向对象编程,面向对象编程是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而