很多时候我们不希望使用Windows提供的窗体。
我们希望使用一个无边框的窗体,什么border,caption透明就行了。
下面我们来说下一些实现方法。

这个方法要求窗体自定义的border size, 需要使用Form的Padding来实现
例如设置Padding = 5, 则Form的四周有一个5像素的border。如下图:

可以看到内框外面还有5个像素的蓝色窗体。
如果你喜欢这种方式的话,恭喜你,这个实现及其简单。

  1. 首先我们实现窗体四周的放大缩小
    你只需要在你的窗体中重写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值保持一致。

  1. 接下来说下如何实现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的移动和改变大小(一)相关推荐

  1. 如何实现一个无边框Form的移动和改变大小(二)

    接着上文:这里写链接内容 我们来说说一个比较复杂的实现, 效果如图: 注意为了能够凸显没有NC(NotClient)区域,我们额外用了3个panel分别放在窗体的左右和下部.用来模拟客户自己的控件. ...

  2. 2021-06-06 一个无边框可置顶的倒计时软件

    倒计时软件 显示效果如下,无边框,可置顶 通过设置程序生成的config.ini文件来修改显示的文字和deadline,也支持修改文字颜色.字体.字号.窗口显示的位置等要素. 倒计时结束后播放铃声提醒 ...

  3. css笔记:用css定义一个无边框的按钮

    测试代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

  4. C# 无边框异型窗体制作

    对于C# 更改窗体外观感觉并不那么轻松 更改窗体外观涉及到使用GDI+ 我所知道的有两种方法: 有系统边框的窗体  处理窗体的Paint方法,在paint方法中 参数e.Graphics属性将返回一个 ...

  5. 01.WPF中制作无边框窗体

    [引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBor ...

  6. PotPlayer 高逼格无边框的本地播放器

    PotPlayer 安装以及设置 可以在官网下载安装包:http://potplayer.daum.net 然后安装--运行-- 嗯,是的,PotPlayer的官方皮肤界面就是这么样貌平平,一点都不逼 ...

  7. Electron无边框窗口(最小化、最大化、关闭、拖动)以及动态改变窗口大小

    文章目录 一.目标原型 1. 目标 2. 原型设计 3. 原型初步实现 二.无边框窗口 1. 要点 2. 改造 三.可拖拽区 1. 要点 2. 改造 四.最小化.最大化.关闭 1. 要点 2. 改造 ...

  8. A7:Unity窗口化无边框模式

    将下面代码复制进入脚本里,然后随便放到一个物体上即可实现窗口化启动无边框哦~ using System; using System.Collections; using System.Runtime. ...

  9. QT 创建一个 可移动、可拉伸的无边框窗体

    在使用QT创建窗体的时候,为了使窗口美化,通常不使用QT自带的边框.会调用下面函数去除窗体边框. setWindowFlags(Qt::FramelessWindowHint) 但是有个问题,当去除了 ...

  10. Simple WPF:实现一个透明、无边框、鼠标穿透的WPF窗体

    WPF 透明窗体和鼠标事件穿透 一个自定义WPF窗体的解决方案,借鉴了吕毅老师的WPF制作高性能的透明背景的异形窗口一文,并在此基础上增加了鼠标穿透的功能.可以使得透明窗体的鼠标事件穿透到下层,在下层 ...

最新文章

  1. 从阿里云下载图片到本地
  2. php获取页面a标签内容_AKCMS常用标签代码整理
  3. 【深度学习】你心目中 idea 最惊艳的深度学习领域论文是哪篇?
  4. 添加tomcat7插件设置jdk编译版本
  5. java响应很慢排插_服务响应时间慢:Java SecureRandom和/ dev / random - java
  6. AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享
  7. AD/DA的分类与指标
  8. 是什么决定了创业的成败?
  9. 5天被迫喊停!Win 10史上最短命系统升级:删文件、无法联网,误报CPU使用率
  10. 日常记录,记下来自己的遇到的问题
  11. python如何将数组里的数提取出来_python – 从数组数组中提取数组
  12. android系统裁剪优化
  13. CSS3动画实现牛顿摆
  14. mysql 备份库的shell_shell脚本之 备份mysql数据库
  15. python三维曲面合并_绘制多面体的三维曲面
  16. ISA8051内部结构讲解
  17. python socket基于TCP/IP协议实现多人聊天室
  18. jstack排查cpu使用率过高
  19. arduino知识点梳理(二)——INPUT_PULLUP模式
  20. 你所在的IT公司有多少人是培训机构出来的

热门文章

  1. table切换数据 vue_Vue实现表格中对数据进行转换、处理的方法
  2. php mysql数据库同步_教你怎样在两台MySQL数据库间实现同步
  3. html页面显示代码插件,客户端显示web网页支持html5的第三方内核插件
  4. 操作文件读写JSON的建议工具类
  5. hdu acm 1241
  6. a ppt of CRF
  7. java基础学习(6)疯狂java讲义第5章课后习题解答源码
  8. Shallow Neural Network Week 3
  9. 降维系列之 AutoEncoder 自动编码器
  10. 每日一题/015/tr(AB)=tr(BA)/反对称矩阵的充要条件/如果 AA‘=-A^2,那么是反对称矩阵