C# WinForm 拖动无边框窗体 改变无边框窗体尺寸
来源:互联网 发布:阿松手办淘宝 编辑:程序博客网 时间:2024/06/05 06:50
C# WinForm 拖动无边框窗体 改变无边框窗体尺寸
经常遇到这种情况、窗体的边框去掉了、然后种种问题就出来了:
不能拖动、
不能改变窗体大小、
不能......
当然、肯定有解决方案滴*^_^*
今天的目标就是:
可以直接拖动没有边框的窗体、
可以直接拉拽窗体改变其大小、
制作步骤如下:
新建WinForm程序、添加一个启动的窗体、
将其边框设置为None、
进入代码编辑界面、
定义如下常量值:
1 const int Guying_HTLEFT = 10;2 const int Guying_HTRIGHT = 11;3 const int Guying_HTTOP = 12;4 const int Guying_HTTOPLEFT = 13;5 const int Guying_HTTOPRIGHT = 14;6 const int Guying_HTBOTTOM = 15;7 const int Guying_HTBOTTOMLEFT = 0x10;8 const int Guying_HTBOTTOMRIGHT = 17;
重写系统WndProc函数:
1 protected override void WndProc(ref Message m) 2 { 3 switch (m.Msg) 4 { 5 case 0x0084: 6 base.WndProc(ref m); 7 Point vPoint = new Point((int)m.LParam & 0xFFFF, 8 (int)m.LParam >> 16 & 0xFFFF); 9 vPoint = PointToClient(vPoint);10 if (vPoint.X <= 5)11 if (vPoint.Y <= 5)12 m.Result = (IntPtr)Guying_HTTOPLEFT;13 else if (vPoint.Y >= ClientSize.Height - 5)14 m.Result = (IntPtr)Guying_HTBOTTOMLEFT;15 else m.Result = (IntPtr)Guying_HTLEFT;16 else if (vPoint.X >= ClientSize.Width - 5)17 if (vPoint.Y <= 5)18 m.Result = (IntPtr)Guying_HTTOPRIGHT;19 else if (vPoint.Y >= ClientSize.Height - 5)20 m.Result = (IntPtr)Guying_HTBOTTOMRIGHT;21 else m.Result = (IntPtr)Guying_HTRIGHT;22 else if (vPoint.Y <= 5)23 m.Result = (IntPtr)Guying_HTTOP;24 else if (vPoint.Y >= ClientSize.Height - 5)25 m.Result = (IntPtr)Guying_HTBOTTOM;26 break;27 case 0x0201: //鼠标左键按下的消息 28 m.Msg = 0x00A1; //更改消息为非客户区按下鼠标 29 m.LParam = IntPtr.Zero; //默认值 30 m.WParam = new IntPtr(2);//鼠标放在标题栏内 31 base.WndProc(ref m);32 break;33 default:34 base.WndProc(ref m);35 break;36 }37 }
OK、运行一下看看效果吧、可以拖动、可以拖拽窗体改变尺寸、、、
呵呵、
完整代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace Demo11 {12 public partial class Frm_Main : Form13 {14 public Frm_Main()15 {16 InitializeComponent();17 StartPosition = FormStartPosition.CenterScreen;18 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;19 }20 21 const int Guying_HTLEFT = 10;22 const int Guying_HTRIGHT = 11;23 const int Guying_HTTOP = 12;24 const int Guying_HTTOPLEFT = 13;25 const int Guying_HTTOPRIGHT = 14;26 const int Guying_HTBOTTOM = 15;27 const int Guying_HTBOTTOMLEFT = 0x10;28 const int Guying_HTBOTTOMRIGHT = 17;29 30 protected override void WndProc(ref Message m)31 {32 switch (m.Msg)33 {34 case 0x0084:35 base.WndProc(ref m);36 Point vPoint = new Point((int)m.LParam & 0xFFFF,37 (int)m.LParam >> 16 & 0xFFFF);38 vPoint = PointToClient(vPoint);39 if (vPoint.X <= 5)40 if (vPoint.Y <= 5)41 m.Result = (IntPtr)Guying_HTTOPLEFT;42 else if (vPoint.Y >= ClientSize.Height - 5)43 m.Result = (IntPtr)Guying_HTBOTTOMLEFT;44 else m.Result = (IntPtr)Guying_HTLEFT;45 else if (vPoint.X >= ClientSize.Width - 5)46 if (vPoint.Y <= 5)47 m.Result = (IntPtr)Guying_HTTOPRIGHT;48 else if (vPoint.Y >= ClientSize.Height - 5)49 m.Result = (IntPtr)Guying_HTBOTTOMRIGHT;50 else m.Result = (IntPtr)Guying_HTRIGHT;51 else if (vPoint.Y <= 5)52 m.Result = (IntPtr)Guying_HTTOP;53 else if (vPoint.Y >= ClientSize.Height - 5)54 m.Result = (IntPtr)Guying_HTBOTTOM;55 break;56 case 0x0201: //鼠标左键按下的消息 57 m.Msg = 0x00A1; //更改消息为非客户区按下鼠标 58 m.LParam = IntPtr.Zero; //默认值 59 m.WParam = new IntPtr(2);//鼠标放在标题栏内 60 base.WndProc(ref m);61 break;62 default:63 base.WndProc(ref m);64 break;65 }66 }67 }68 }
好了、这次的分享就到这里了、感谢您的支持、、、
0 0
- C# WinForm 拖动无边框窗体 改变无边框窗体尺寸
- C# WinForm 改变无边框窗体尺寸
- C# 无边框窗体随意拖动和改变尺寸
- C# WinForm 拖动无边框窗体
- C# WinForm 拖动无边框窗体
- 无边框窗体拖动
- 无边框窗体拖动
- winForm实现拖动无边框窗体
- 无边框窗体拖动和改变大小
- WinForm改变无边框窗体大小
- C# 如何鼠标拖动无边框窗体
- c# 移动拖动无边框窗体
- c# 拖动无边框窗体 张宇轩
- C#无边框窗体的拖动
- C# 用鼠标拖动无边框窗体
- C# 如何鼠标拖动无边框窗体
- C# 实现拖动无边框窗体
- C#实现无边框窗体拖动
- Android(Lollipop/5.0) Material Design
- secureCRT 让linux vim工具 显示颜色
- synchronized和lock的区别
- java读取txt文件并以在每行以空格取数据
- android屏蔽listview 的item事件
- C# WinForm 拖动无边框窗体 改变无边框窗体尺寸
- python如何实现快速的求和函数
- 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
- class、extends、super
- 数据结构实验之栈五:下一较大值(一)
- Java开发环境搭建
- Android之RecyclerView实现时光轴
- 基础练习 特殊的数字
- mac系统下.../Users/***Library/为什么进入Finder找不到Library目录?