如何实现一个无边框Form的移动和改变大小(一)
很多时候我们不希望使用Windows提供的窗体。
我们希望使用一个无边框的窗体,什么border,caption透明就行了。
下面我们来说下一些实现方法。
这个方法要求窗体自定义的border size, 需要使用Form的Padding来实现
例如设置Padding = 5, 则Form的四周有一个5像素的border。如下图:
可以看到内框外面还有5个像素的蓝色窗体。
如果你喜欢这种方式的话,恭喜你,这个实现及其简单。
- 首先我们实现窗体四周的放大缩小
你只需要在你的窗体中重写WndProc,告诉系统哪些位置是HT_TOP,哪些位置是HT_Bottom等就可以了
代码如下:
protected override void WndProc(ref Message m){if(m.Msg == (int)WM.WM_NCHITTEST ){Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);pos = this.PointToClient(pos);if (pos.X < 0 || pos.Y < 0){//非法位置}else if (pos.X <= _border){//左侧if (pos.Y <= _border){//左上侧m.Result = (IntPtr)HT.HTTOPLEFT;return;}else if (pos.Y >= this.Height - _border){//左下侧m.Result = (IntPtr)HT.HTBOTTOMLEFT;return;}else{//左侧m.Result = (IntPtr)HT.HTLEFT;return;}}else if (pos.X >= this.Width - _border){//右侧if (pos.Y <= _border){//右上侧m.Result = (IntPtr)HT.HTTOPRIGHT;return;}else if (pos.Y >= this.Height - _border){//右下侧m.Result = (IntPtr)HT.HTBOTTOMRIGHT;return;}else{//右侧m.Result = (IntPtr)HT.HTRIGHT;return;}}else{//中部if (pos.Y <= _border){//上中侧m.Result = (IntPtr)HT.HTTOP;return;}else if (pos.Y >= this.Height - _border){//下中侧m.Result = (IntPtr)HT.HTBOTTOM;return;}else{}}return;}else{base.WndProc(ref m);} }int _border = 5;
其中WM.WM_NCHITTEST是用enum实现, 大家可以用int值来替换。
_border就是边框的长度,应该和WinForm的Padding值保持一致。
- 接下来说下如何实现Caption
创建一个panel, Dock = Top, 创建一个事件
panelCaption.MouseDown += panelCaption_MouseDown;
事件的实现如下:
void panelCaption_MouseDown(object sender, MouseEventArgs e){ if(e.Button == MouseButtons.Left){NativeMethods.ReleaseCapture();NativeMethods.SendMessage(this.Handle, (uint)WM.WM_NCLBUTTONDOWN, (UIntPtr)HT.HTCAPTION, (IntPtr)0);}}
其中NativeMethods都是Windows的原生函数,请各位自行书写,这里不再累述。
这样一个无边框(伪)的Form就如此这般诞生了。
如果要实现一个无边框(正)的Form请看下集。
转载于:https://www.cnblogs.com/norsd/p/6359305.html
如何实现一个无边框Form的移动和改变大小(一)相关推荐
- 如何实现一个无边框Form的移动和改变大小(二)
接着上文:这里写链接内容 我们来说说一个比较复杂的实现, 效果如图: 注意为了能够凸显没有NC(NotClient)区域,我们额外用了3个panel分别放在窗体的左右和下部.用来模拟客户自己的控件. ...
- 2021-06-06 一个无边框可置顶的倒计时软件
倒计时软件 显示效果如下,无边框,可置顶 通过设置程序生成的config.ini文件来修改显示的文字和deadline,也支持修改文字颜色.字体.字号.窗口显示的位置等要素. 倒计时结束后播放铃声提醒 ...
- css笔记:用css定义一个无边框的按钮
测试代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...
- C# 无边框异型窗体制作
对于C# 更改窗体外观感觉并不那么轻松 更改窗体外观涉及到使用GDI+ 我所知道的有两种方法: 有系统边框的窗体 处理窗体的Paint方法,在paint方法中 参数e.Graphics属性将返回一个 ...
- 01.WPF中制作无边框窗体
[引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBor ...
- PotPlayer 高逼格无边框的本地播放器
PotPlayer 安装以及设置 可以在官网下载安装包:http://potplayer.daum.net 然后安装--运行-- 嗯,是的,PotPlayer的官方皮肤界面就是这么样貌平平,一点都不逼 ...
- Electron无边框窗口(最小化、最大化、关闭、拖动)以及动态改变窗口大小
文章目录 一.目标原型 1. 目标 2. 原型设计 3. 原型初步实现 二.无边框窗口 1. 要点 2. 改造 三.可拖拽区 1. 要点 2. 改造 四.最小化.最大化.关闭 1. 要点 2. 改造 ...
- A7:Unity窗口化无边框模式
将下面代码复制进入脚本里,然后随便放到一个物体上即可实现窗口化启动无边框哦~ using System; using System.Collections; using System.Runtime. ...
- QT 创建一个 可移动、可拉伸的无边框窗体
在使用QT创建窗体的时候,为了使窗口美化,通常不使用QT自带的边框.会调用下面函数去除窗体边框. setWindowFlags(Qt::FramelessWindowHint) 但是有个问题,当去除了 ...
- Simple WPF:实现一个透明、无边框、鼠标穿透的WPF窗体
WPF 透明窗体和鼠标事件穿透 一个自定义WPF窗体的解决方案,借鉴了吕毅老师的WPF制作高性能的透明背景的异形窗口一文,并在此基础上增加了鼠标穿透的功能.可以使得透明窗体的鼠标事件穿透到下层,在下层 ...
最新文章
- 从阿里云下载图片到本地
- php获取页面a标签内容_AKCMS常用标签代码整理
- 【深度学习】你心目中 idea 最惊艳的深度学习领域论文是哪篇?
- 添加tomcat7插件设置jdk编译版本
- java响应很慢排插_服务响应时间慢:Java SecureRandom和/ dev / random - java
- AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享
- AD/DA的分类与指标
- 是什么决定了创业的成败?
- 5天被迫喊停!Win 10史上最短命系统升级:删文件、无法联网,误报CPU使用率
- 日常记录,记下来自己的遇到的问题
- python如何将数组里的数提取出来_python – 从数组数组中提取数组
- android系统裁剪优化
- CSS3动画实现牛顿摆
- mysql 备份库的shell_shell脚本之 备份mysql数据库
- python三维曲面合并_绘制多面体的三维曲面
- ISA8051内部结构讲解
- python socket基于TCP/IP协议实现多人聊天室
- jstack排查cpu使用率过高
- arduino知识点梳理(二)——INPUT_PULLUP模式
- 你所在的IT公司有多少人是培训机构出来的
热门文章
- table切换数据 vue_Vue实现表格中对数据进行转换、处理的方法
- php mysql数据库同步_教你怎样在两台MySQL数据库间实现同步
- html页面显示代码插件,客户端显示web网页支持html5的第三方内核插件
- 操作文件读写JSON的建议工具类
- hdu acm 1241
- a ppt of CRF
- java基础学习(6)疯狂java讲义第5章课后习题解答源码
- Shallow Neural Network Week 3
- 降维系列之 AutoEncoder 自动编码器
- 每日一题/015/tr(AB)=tr(BA)/反对称矩阵的充要条件/如果 AA‘=-A^2,那么是反对称矩阵