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


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

    视频效果地址:

    一、自制winform超牛用流程图工作流组件,纯GDI绘图面向对象涂层设计

    二、自制winform超牛用流程图工作流组件,追加体验功能以及讲解代码设计

    功能目标:

    需要写一个仿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、泳道图层

  • 相关阅读:
    JavaScript实现接口的三种经典方式
    javascript实现继承3种方式: 原型继承、借用构造函数继承、组合继承,模拟extends方法继承
    JavaScript简单重写构造器的原型
    cocos2d-x中的宏定义CC_PROPERTY
    CCCallFunc CCCallFuncN CCCallFuncND的区别和使用
    action(二)
    action(一)
    CShopDialog类
    cocos2d-x与ISO内存管理(转)
    CGameConfig类
  • 原文地址:https://www.cnblogs.com/liuyunsheng/p/15575599.html
Copyright © 2020-2023  润新知