最近在整理和编写基于C#的WinForm应用程序,然后碰到一个其他读者也可能碰到的问题,就是C#的Borderless无边框窗体的动画效果问题。

在Visual Studio 2022里,C#的WinForm程序提供了Borderless无边框窗体的样式效果,但是它没提供在无边框窗体下,窗体的载入、最小化、最大化的动画效果就没处理了。这个动画效果问题很多读者该也碰到过。我搜过其它的无边框窗体的例子,很多都是只在按钮里设置窗体状态为最小化、最大化,但是这个窗体却直接显示和直接消失的,没有那个带标题栏窗体的动画效果。所以,为了解决这个问题,就需要自己去处理这个无边框窗体的动画效果了。经过一番搜索和编码,终于有了今天这个完美的无边框窗体的动画效果解决方案的博文。具体看下面的介绍:

  1、 项目目录;

  项目目录见下面的截图,具体请打开解决方案进行查看。

  

  2、 一些代码的介绍;

  下面进行一些功能代码的介绍。

  1) 无边框窗体父类定义;

  该父类笔者整理放在了Componet目录里的BorderlessAnimation目录里,直接复制该目录到对应的项目里,具体的代码读者自己更改Native.cs文件和FormBase.cs文件里的命名空间,然后放在对应的组件库里或者项目文件夹下,让其它使用到的窗体能够应用。

  该父类使用到的一些API函数放在了Native.cs里面。而FormBase文件为窗体的继承类,里面主要对窗体的消息处理等函数进行了编写。

  2) 无边框窗体示例代码;

  该窗体继承类,主要处理窗体的消息,然后进行执行操作,下面主要是一个例子,实现函数在文件下面。请读者自己阅读。因为比较简单,所以没有进行注释编写。

  

  3) 窗体应用例子;

  项目里提供了两个窗体使用示例。Demo1是原来的例子,Demo2是笔者自己写的一个使用例子,更加简洁,读者直接根据需要进行修改即可。

  

  3、 运行效果图;

  这里提供一下运行的效果:

  1) 原来的例子:

  

  2) 简洁的例子:

  

  4、 源码下载;

  这里提供源码下载,请需要的读者打开下面的链接:https://download.csdn.net/download/lzhdim/88084280

  

  写到最后,如果大家对该方案有啥问题的,欢迎大家对源码进行修改更新,让该方案的源码能够给更多的需要解决无边框窗体动画效果的读者以帮助。其实,这个无边框窗体父类主要是通过Windows系统提供的API函数对窗体进行了改造,然后处理相关的窗体消息进行执行而已,具体请读者自己阅读源码。这个解决方案是笔者目前整理的最完美的C#无边框窗体的解决方案了,如果读者还有其它更好的方案及源码,请提供出来让笔者也能够进行应用。

基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章的更多相关文章

  1. Qt无边框窗体-模拟模态窗体抖动效果

    目录 一.概述 二.效果展示 三.功能实现 四.相关文章 原文链接:Qt无边框窗体-模拟模态窗体抖动效果 一.概述 用Qt开发windows客户端界面确实是一大利器,兼顾性能的同时,速度相对来说也不错 ...

  2. 【转】【WPF】 WPF 调用API修改窗体风格实现真正的无边框窗体

    WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm中无边框窗体的样式.但是AllowTransparency ...

  3. WPF 调用API修改窗体风格实现真正的无边框窗体

    原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm ...

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

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

  5. C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置

    C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...

  6. C#自定义按钮、自定义WinForm无边框窗体、自定义MessageBox窗体

    C#自定义按钮.自定义WinForm无边框窗体.自定义MessageBox窗体 C#自定义Button按钮控件 效果展示 C#自定义Winform无边框窗体 效果展示 C#自定义无边框MessageB ...

  7. C#自定义Winform无边框窗体

    C#自定义Winform无边框窗体 在实际项目中,WinForm窗体或者控件不能满足要求,所以就需要自己设计窗体等,当然设计界面可以用的东西很多,例如WPF.或者一些第三方的库等.本例中将采用WinF ...

  8. 【C#】使用DWM实现无边框窗体阴影或全透窗体

    1.无边框窗体阴影,win7(需要开启Aero效果)及以上系统 public class LdwmForm : Form { public LdwmForm() { Initialize(); } / ...

  9. MFC 无边框窗体实现用鼠标拖动窗体边缘实现窗体大小变化

    无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?下面介绍一种方法,通过以下几个步骤即可实现: 1.实现WM_NCHITTEST消息,实现四条边框的模拟 2.实现WM_NCLBUTTONDOWN ...

  10. WinForm无边框窗体移动方法

    C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...

随机推荐

  1. 可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!

    可视化大屏适配/自适应现状 可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件.工具但是我为什么还要重复造轮子呢?因为目前市面上适配工具每一个都无法做到完美的效果,做出来的东 ...

  2. Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享)

    Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享) 常用的两款AI可视化交互应用比较: Gradio Gradio的优势在于易用性,代码结构相比Str ...

  3. CS144 计算机网络 Lab2:TCP Receiver

    前言 Lab1 中我们使用双端队列实现了字节流重组器,可以将无序到达的数据重组为有序的字节流.Lab2 将在此基础上实现 TCP Receiver,在收到报文段之后将数据写入重组器中,并回复发送方. ...

  4. vue2路由导航守卫(钩子函数)

    https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%85%A8%E5%B1%80%E5%89%8D%E7%BD% ...

  5. Mac终端出现 brew command not found 解决

    MacOS 上您需要安装 unrar 以支持 PaddlePaddle,可以使用命令brew install unrar 执行命令后发现 brew 不存在 jimmy@MacBook-Pro ~ % ...

  6. 一文快速入门体验 Hibernate

    前言 Hibernate 是一个优秀的持久层的框架,当然,虽然现在说用得比较多的是 MyBaits,但是我工作中也不得不接触 Hibernate,特别是一些老项目需要你维护的时候.所以,在此写下这篇文 ...

  7. vue下载附件按钮功能

    一.tools文件夹下tools文件中封装下载方法: const iframeId = 'download_file_iframe' function iframeEle (src) { let el ...

  8. 2022-02-11:单词缩写。 给定一个由n个不重复非空字符串组成的数组,你需要按照以下规则为每个单词生成最小的缩写。 初始缩写由起始字母+省略字母的数量+结尾字母组成。 若存在冲突,亦即多于一个单

    2022-02-11:单词缩写. 给定一个由n个不重复非空字符串组成的数组,你需要按照以下规则为每个单词生成最小的缩写. 初始缩写由起始字母+省略字母的数量+结尾字母组成. 若存在冲突,亦即多于一个单 ...

  9. 2021-10-15:单词拆分。给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你

    2021-10-15:单词拆分.给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词.说明:拆分时可以重复使用字典中的单词.你 ...

  10. AccessToken、for_user、get_token

    在Django REST framework的SimpleJWT库中,AccessToken是一个类,用于表示一个JSON Web Token (JWT)中的访问令牌部分.访问令牌是一种常见的身份验证 ...