Win无边框窗体拖动改变大小.doc_第1页
Win无边框窗体拖动改变大小.doc_第2页
Win无边框窗体拖动改变大小.doc_第3页
Win无边框窗体拖动改变大小.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Winform拖拽改变无边框窗体大小大家在进行Winform开发过程中,很容易就可以完成一个窗口的布局工作,但现在的软件界面美化效果一个比一个好,很多软件都是无边框的,于是乎,你是不是也感叹:winform的带边框的窗体如此丑陋,我一定要把边框去掉!OK,去掉边框对Winform来说那绝对一件相当easy的事情,一句this.FormBorderStyle=FormBorderStyle.None就可搞定。简单倒是简单,边框去掉了,达到了自己的要求,但同时来了很多麻烦,其中一个就是窗口无法拖动改变大小了(这个问题在网上也有解决办法,但是清一色都是调用Win32的API来处理,可是如我这般的新手们对Win32了解甚少,根本不了解其运行原理和机制,所以还是希望用纯托管的代码来解决此问题,今天下午闲着没事,突然来了些“灵感”,尝试了一下,现在解决了,把我的一些想法拿出来和大家分享一下,如有bug,还望大家多多批评指正!好了,啰嗦半天了,不废话,先上图,看看是不是你想要的效果:思想:要拖拽改变窗体大小必须要鼠标按下,同时要知道拖拽方向,主要用到窗体的三个事件:(1) MouseDown:只有在鼠标按下时候,我们才可以拖动边缘改变窗体大小;(2) MouseUp:鼠标弹开以后,将不能改变窗体尺寸;(3) MouseMove:当鼠标处于按下状态时,鼠标移动改变窗体大小。以下是代码,你可以先建一个项目,复制代码进去,看一下效果:/定义一个枚举,表示拖动方向,具体作用看后面public enum MouseDirection Herizontal,/水平方向拖动,只改变窗体的宽度 Vertical,/垂直方向拖动,只改变窗体的高度 Declining,/倾斜方向,同时改变窗体的宽度和高度 None/不做标志,即不拖动窗体改变大小/只需新建一个Form窗体即可,在此命名:Form3 public partial class Form3 : Form public Form3() InitializeComponent(); bool isMouseDown = false; /表示鼠标当前是否处于按下状态,初始值为否 MouseDirection direction = MouseDirection.None;/表示拖动的方向,起始为None,表示不拖动 private void Form3_MouseDown(object sender, MouseEventArgs e) /鼠标按下 isMouseDown = true; private void Form3_MouseUp(object sender, MouseEventArgs e) /鼠标弹起, isMouseDown = false; /既然鼠标弹起了,那么就不能再改变窗体尺寸,拖拽方向置None direction = MouseDirection.None; private void Form3_MouseMove(object sender, MouseEventArgs e) /鼠标移动过程中,坐标时刻在改变/当鼠标移动时横坐标距离窗体右边缘5像素以内且纵坐标距离下边缘也在5像素以内时,要将光标变为倾斜的箭头形状,同时拖拽方向direction置为MouseDirection.Declining if (e.Location.X = this.Width - 5 & e.Location.Y this.Height - 5) this.Cursor = Cursors.SizeNWSE; direction = MouseDirection.Declining; /当鼠标移动时横坐标距离窗体右边缘5像素以内时,要将光标变为倾斜的箭头形状,同时拖拽方向direction置为MouseDirection.Herizontal else if (e.Location.X = this.Width - 5) this.Cursor = Cursors.SizeWE; direction = MouseDirection.Herizontal; /同理当鼠标移动时纵坐标距离窗体下边缘5像素以内时,要将光标变为倾斜的箭头形状,同时拖拽方向direction置为MouseDirection.Vertical else if (e.Location.Y = this.Height - 5) this.Cursor = Cursors.SizeNS; direction = MouseDirection.Vertical; /否则,以外的窗体区域,鼠标星座均为单向箭头(默认) else this.Cursor = Cursors.Arrow;/设定好方向后,调用下面方法,改变窗体大小 ResizeWindow(); private void ResizeWindow() /这个判断很重要,只有在鼠标按下时才能拖拽改变窗体大小,如果不作判断,那么鼠标弹起和按下时,窗体都可以改变 if (!isMouseDown) return;/MousePosition的参考点是屏幕的左上角,表示鼠标当前相对于屏幕左上角的坐标this.left和this.top的参考点也是屏幕,属性MousePosition是该程序的重点 if (direction = MouseDirection.Declining) /此行代码在mousemove事件中已经写过,在此再写一遍,并不多余,一定要写 this.Cursor = Cursors.SizeNWSE; /下面是改变窗体宽和高的代码,不明白的可以仔细思考一下 this.Width = MousePosition.X - this.Left; this.Height = MousePosition.Y - this.Top; /以下同理 if (direction = MouseDirection.Herizontal) this.Cursor = Cursors.SizeWE; this.Width = MousePosition.X - this.Left; else if (direction = MouseDirection.Vertical) this.Cursor = Cursors.SizeNS; this

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论