4

GDI绘制Winform工作流组件、具有独立图层的增删处理、防PPT效果

 2 years ago
source link: https://www.cnblogs.com/liuyunsheng/p/15575599.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

GDI绘制Winform工作流组件、具有独立图层的增删处理、防PPT效果

最近接了个小项目10K。用了2个下班时间写完,共花费了6-7个小时完成。如有同类需求的可以与本人联系,QQ:120772981

功能目标:

需要写一个仿PPT画泳道图的组件。之前写过工作流的组件,其实这个跟工作流组件基本一样,所以写这个也得心应手。PPT的效果图如下,

在C#winform里面想要及支持手动拖拽又要只支持自定义的一些功能, 很会想到拖拽控件,控件直接放图片不就的了吗?这样也可以, 但后续控件元素越来越大的时候,可能会出现控件闪屏,严重的可能性能都跟不上,再有如果用户需要放大和缩小,里面有几百个元素,是不是很崩溃。 

随着元素的增加以及用户的操作逻辑增加,可能会直至跟不上用户操作的节奏 。会很托执行效率。

结合自己的经验,采用GDI绘图,设计思路就是将所有元素都有独立的图层。 用户可自定义图层,绘制自定义图层内容,支持对目标图层元素的移动、放大缩小,置顶和置底显示等功能。同时这个组件支持导出JSON图层元素数据,并将Json数据加载还原图形显示等功能。

估计是多年经验,写起来这个设计思想有得到了进一步的升华。感觉用这个思想写photoshop问题不大(我吹牛B呢,没费用搞起来没啥意义。)。

具体实现界面如下:

1、矩形框

首先我们数带圆角的组件 用户的矩形框追加圆角属性,搞B/S方面的同学应该都知道CornerRadius或Radius 是圆角属性,如果我们采用图片的方式,在拉伸的时候图形元素就会产生严重变形。所以我们通过

原始的GDI加能够很好的解决这个问题,

通过鼠标可任意移动图层位置,同时,通过键盘上、下、左、右按键用户也能够最图层进行微调。

针对很多开发者说GDI绘图慢的问题, C# 的GDI绘图本身并不慢,慢的根本原因还是在于能力不足所致。找找自身代码原因,有些绘图能局部刷新,就自己应该刷那就刷哪,你非得全刷,再有你的处理明明已经阻塞了你还要继续同步执行。不慢才怪。目前我的这个组件放100个图层,鼠标任意拖拽任意移动,CPU占用率不足5%。 

最后你来个总结,c# GDI不行。建议别听风是雨。先深入了解一下他的机制。 最主要的就是这个绘图设计思想。

对于这个组件支持文字自动换行。设置字体颜色,边框颜色以及里面的背景颜色。

外边框的四个小放款是放大和所有按钮。鼠标点击是追加了ReSize光标,提升用户指导性操作。

1、判断框

跟矩形框相同,用户也可以对其进行移动、调节尺寸,设置输入内容、设置边框颜色,背景颜色,字体大小,字体颜色等属性。

 每个图形元素都是一个独立的图层,用户可以对其设置置顶,和置底。如下图:

 置于底层

3、文档框

 所有的基础属性都集成一个基类元素,基类元素均包含以下操作, 用户也可以对其进行移动、调节尺寸,设置输入内容、设置边框颜色,背景颜色,字体大小,字体颜色等属性。

 4、平行四边形框

5、泳道图层


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK