C# Winform去掉窗体灰色边框,以及实现窗体可拖动边框改变大小
时间:2019-09-18
本文章向大家介绍C# Winform去掉窗体灰色边框,以及实现窗体可拖动边框改变大小,主要包括C# Winform去掉窗体灰色边框,以及实现窗体可拖动边框改变大小使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1)去掉窗体灰色边框:
在设计窗口中,将Form的FormBorderStyle设置为 FixedSingle 。但是设置后窗口无法实现拖动边框改变大小。需要在Form.cs加入以下代码:
private const int WM_NCLBUTTONDBLCLK = 163; private const int WM_NCHITTEST = 132; /// <summary> /// 边框改变大小 /// </summary> /// <param name="m"></param> protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_NCLBUTTONDBLCLK://WM_NCLBUTTONDBLCLK=163 <0xA3>拦截鼠标非客户区左键双击消息,决定窗体是否最大化显示 if (this.MaximizeBox) { base.WndProc(ref m); this.Invalidate(); } return; case WM_NCHITTEST://WM_NCHITTEST=132 <0x84> base.WndProc(ref m);//如果去掉这一行代码,窗体将失去MouseMove..等事件 //Point lpint = new Point((int)m.LParam);//可以得到鼠标坐标,这样就可以决定怎么处理这个消息了,是移动窗体,还是缩放,以及向哪向的缩放 //if (lpint.Y < 30) // m.Result = (IntPtr)0x2;//托动HTCAPTION=2 <0x2> if (WindowState != FormWindowState.Maximized) { Point p2 = this.PointToClient(MousePosition);//鼠标相对于窗体的坐标 //当然可以托动也可以改变大小了 //label1.Text = p2.X + "," + p2.Y; //HTLEFT=10 <0xA> 左边框 if (p2.X < 5 && p2.Y > 5 && p2.Y < this.Height - 5) m.Result = (IntPtr)0xA; else if (p2.Y < 5 && p2.X > 5 && p2.X < this.Width - 5) m.Result = (IntPtr)0xC; //HTTOP=12 <0xC> 上边框 else if (p2.X < 5 && p2.Y < 5) m.Result = (IntPtr)0xD; //HTTOPLEFT=13 <0xD> else if (p2.X >= this.Width - 5 && p2.Y < 5) m.Result = (IntPtr)0xE; //HTTOPRIGHT=14 <0xE> else if (p2.X > this.Width - 5 && p2.Y > 5 && p2.Y < this.Height - 5) m.Result = (IntPtr)0xB; //HTRIGHT=11 <0xB> else if (p2.Y >= this.Height - 5 && p2.X > 5 && p2.X < this.Width - 5) m.Result = (IntPtr)0xF; //HTBOTTOM=15 <0xF> else if (p2.X < 5 && p2.Y >= this.Height - 5) m.Result = (IntPtr)0x10; //HTBOTTOMLEFT=16 <0x10> else if (p2.X > this.Width - 5 && p2.Y >= this.Height - 5) m.Result = (IntPtr)0x11; //HTBOTTOMRIGHT=17 <0x11> //HTBORDER=18 <0x12> //HTMINBUTTON=8 <0x8> 最小化按钮 //HTMAXBUTTON=9 <0x9> 最大化按钮 //HTCLOSE=20 <0x14> 关闭按钮 } return; default: base.WndProc(ref m); return; } }
原文地址:https://www.cnblogs.com/PER10/p/11541497.html
- 使用strace诊断奇怪的sqlplus登录问题(r5笔记第29天)
- 读书笔记 之《Thinking in Java》(对象、集合、异常)
- 深度解析dba_segments和sys.seg$中的细节差异(上) (r5笔记第27天)
- 【大牛经验】26种语言输出HelloWord
- 深度解析dba_segments和sys.seg$中的细节差异(下) (r5笔记第28天)
- Linux命令(面试+工作版)
- 纠结的paste格式问题(未解决) (r5笔记第26天)
- 由MySQL中的falcon存储引擎引申的八卦杂谈(r5笔记第23天)
- 12.观察者/状态模式
- 数据补丁中需要注意的几个问题(r5笔记第21天)
- 简单对比MySQL和Oracle中的一个sql解析细节 (r5笔记第40天)
- 关于Oracle和MySQL中的无密码登录 (r5笔记第39天)
- 快速定位隐蔽的sql性能问题及调优(r5笔记第38天)
- 关于统计信息过期的性能落差(r5笔记第36天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C++入门指南及实战 第三步 基本变量
- 最全总结 | 聊聊 Python 数据处理全家桶(配置篇)
- FlexSDK工具包的介绍与编译使用
- 《零基础看得懂的C语言入门教程 》——(二)C语言没那么难简单开发带你了解流程
- Ansible自动化运维学习笔记5
- Ansible自动化运维学习笔记4
- 《零基础看得懂的C语言入门教程 》——(三)轻轻松松理解第一个C语言程序
- Python自动化运维2
- AirTest 基本使用及框架浅剖析——五分钟上手制作游戏辅助
- 【面试题】734- 从一道面试题谈谈对 EventLoop 的理解
- (上)python3 selenium3 从框架实现代码学习selenium让你事半功倍
- (下)python3 selenium3 从框架实现代码学习selenium让你事半功倍
- 【Vuejs】738- 一篇文章上手Vue3中新增的API
- Python自动化运维1
- python图形绘制库turtle中文开发文档及示例大全【最详细、连结果图都有,gif格式的!】