【开源】做了一个WinForm窗体的投影组件,能够为窗口添加影子效果

发布时间:2017-7-1 11:44:54编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"【开源】做了一个WinForm窗体的投影组件,能够为窗口添加影子效果 ",主要涉及到【开源】做了一个WinForm窗体的投影组件,能够为窗口添加影子效果 方面的内容,对于【开源】做了一个WinForm窗体的投影组件,能够为窗口添加影子效果 感兴趣的同学可以参考一下。

最近手头上的项目终于忙得差不多了,想起好久没有更新了的NanUI,再看着每天QQ群未读消息闪烁的标志,突然才发现似乎愧对了群里各位喜爱NanUI的朋友们。于是乎,就想趁这几天有时间,好好的修复一下NanUI已知的BUG,再用有限的时间推进整个项目的进度。

在复习代码的时候,想起了群里有朋友提出说NanUI的窗口的几个问题:

  • 在某些Win7环境下会出现窗口标题绘制错误;
  • Win8下面窗口阴影没有问题
  • 模拟绘制的影子拖动窗口改变大小时绘制缓慢资源占用大

原来NanUI呈现窗口的方式有两种,一种是使用DWM的ExtendIntoView这个方法让窗口的客户区扩展至整个窗口来实现满窗口显示HTML内容的需求;还有一种兼容的方式是使用重绘非客户区来实现扩展客户的方式。

第一中方式有几个问题,Win7下面因为有玻璃效果和粗边框,会导致呈现效果很怪异,而且有群友反应的Win7标题栏绘制错误也跟DWM有关系,特别是禁用了Win7玻璃效果的时候最为明显;其次,Win8下面DWM不会为窗口绘制投影,所以窗口就没有影子效果,很丑。

第二种方式窗口绘制虽然没有什么问题,但是窗口的影子需要自己来画,我之前采用的方案是在主窗口后面外挂了个LayeredWindow样式子窗口来手动绘制窗口影子,之前看GitHub上有另外一个国人做的窗体投影的工具winform.DropShadow, 实现了投影,而且投影还够动态生成,但是有几个问题:

  • 阴影呈现效果与主窗体极不协调
  • 如果把主窗体弄成可以改变大小的形式,那么绘制影子的时候卡顿非常明显
  • 似乎内存泄漏,内存越用越大

同样的,我自己来画的窗口也是存在这些问题,因为原理都一样的。

最后研究了2天,终于完成了下面这个能够为窗口添加影子效果的组件——

FormShadow for .NET Winform

中文名:Winfom投影组件

GITHUB地址:https://github.com/NetDimension/Winform-FormShadow/

FormShadow 能够快速的为你的WinForm窗口绘制窗体投影,当然不是用添加 CS_DROPSHADOW 样式这种又陋又难看的方式。其工作原理和最近几个版本的Visual Studio Shell采用的投影方式相同,在主窗体的四周创建4个LayeredWindow来承载阴影图片,并与主窗体同步事件。

功能:

  • 为WinForm窗体创建漂亮的投影效果,并且支持 活动/非活动 状态下面的投影颜色。
  • 快速绘制阴影,不闪烁,不卡顿。
  • 主窗体能随意改变大小不受任何限制。

使用方式:

下面的例子就是使用FormShadow最简单的例子,初始化一个Decorator来为主窗体添加影子效果,然后设置了拖动这些影子能改变主窗体(Borderless)的大小。

public partial class Form1 : Form
{

    protected readonly FormShadowDecorator ShadowDecorator;

    public Form1()
    {
        InitializeComponent();
        ShadowDecorator = new FormShadowDecorator(this);
        //启用窗口大小调整
        //Enable resizing form with shadows.
        ShadowDecorator.EnableResize(true);
    }
}

如果在使用这个组件的时候有任何疑问加我的私人QQ(不一定在线,现在大家都微信咯)或者QQ群来讨论,QQ群欢迎任何有关于.NET技术的话题。

2000人QQ群: 241088256

我的QQ: 19843266

赞助作者:

如果你喜欢我的工作,那么欢迎您加入到任何项目的开发中来;

当然你也可以非常直接了当的支付宝或微信扫码来请我喝咖啡:)

乞丐图

“听说之前请我喝咖啡的朋友,最后都走上人生巅峰了呢~”

—— 著名网络乞丐 Mr.JSON


上一篇:coreseek mmseg分词配置和创建
下一篇:通过java实现解压zip,rar的代码

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款