最近接了个小项目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、泳道图层

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

  1. winform快速开发平台 -> 工作流组件(仿GooFlow)

    对于web方向的工作流,一直在用gooflow对于目前我的winform开发平台却没有较好的工作流组件.  针对目前的项目经验告诉我们.一个工作流控件是很必要的. 当然在winform方面的工作流第三 ...

  2. GDI绘制时钟效果,与系统时间保持同步,基于Winform

    2018年工作之余,想起来捡起GDI方面的技术,特意在RichCodeBox项目中做了两个示例程序,其中一个就是时钟效果,纯C#开发.这个CSharpQuartz是今天上午抽出一些时间,编写的,算是偷 ...

  3. WinForm 工作流设计 1

    从事软件行业那么多年,一直很少写博.很多技术,长时间不用都慢慢淡忘. 把自己学到的用笔记下来,可以巩固和发现不足,也可以把自己对技术的一些 理解,分享出来供大家批评指正. 废话不多说,进入正题.工作流 ...

  4. 分享几个.NET WinForm开源组件,纪念逐渐远去的WinForm。。。

    前面3个月的时间内,这些.NET开源项目你知道吗?系列文章已经发表了3篇,共计45个平时接触比较少,曾经默默无闻的.NET开源项目,展示给大家,当然不是每个人都能用得上,但也的确是有些人用了,反响还不 ...

  5. 实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-Web

    实例演示使用RDIFramework.NET 框架的工作流组件 进行业务流程的定义—请假申请流程-Web 参考文章: RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系 ...

  6. 通过GDI+绘制 验证码

    只为了记录下自己的学习历程,方便日后查看 现在开始言归正传,以下为其完整代码附上 using System; using System.Collections.Generic; using Syste ...

  7. Mistral 工作流组件之一 概述

    Mistral的前世今生:  Mistral是Mirantis公司为Openstack开发的工作流组件,提供Workflow As a Service.典型的应用场景包括任务计划服务Cloud Cro ...

  8. C#利用GDI+绘制旋转文字等效果

    C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经 ...

  9. C# 使用GDI+绘制漂亮的MenuStrip和ContextMenuStrip皮肤

    通过上面的效果截图可以看到,重绘后的MenuStrip和ContextMenuStrip可以添加自己的LOGO信息,实现了类似OFFICE2007的菜单显示效果. .NET对菜单控件的绘制提供了一个抽 ...

随机推荐

  1. Docker部署Mysql,如何开启binlog

    0.拉取镜像 sudo docker pull mysql:5.7 1.创建存放映射文件夹 mkdir -p mydata/mysql/log mkdir -p mydata/mysql/data m ...

  2. 8.3 MHA 搭建

    操作步骤 1.配置主从 1.1 master /etc/my.cnf server-id log-bin skip-name-resolve 1.2 master 建立repl用户 grant rep ...

  3. SpringIOC 理论推导

    IOC理论实现 UserDao接口 public interface UserDao { void say(); } UserDaoImpl实现类 public class UserDaoImpl i ...

  4. 洛谷2408不同字串个数/SPOJ 694/705 (后缀数组SA)

    真是一个三倍经验好题啊. 我们来观察这个题目,首先如果直接整体计算,怕是不太好计算. 首先,我们可以将每个子串都看成一个后缀的的前缀.那我们就可以考虑一个一个后缀来计算了. 为了方便起见,我们选择按照 ...

  5. 从0到1使用Kubernetes系列(三):使用Ansible安装Kubernetes集群

    前两期的文章介绍了Kubernetes基本概念和架构,用Kubeadm+Ansible搭建Kubernetes集群所需要的工具及其作用.本篇介绍怎么使用Ansible安装Kubernetes集群. 启 ...

  6. HCNP Routing&Switching之BGP邻居建立条件、优化和认证

    前文我们了解了BGP相关概念.AS相关概念以及BGP邻居类型.基础配置等,相关回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15370838.html:今天我们 ...

  7. Go语言核心36讲(Go语言进阶技术二)--学习笔记

    08 | container包中的那些容器 我们在上次讨论了数组和切片,当我们提到数组的时候,往往会想起链表.那么 Go 语言的链表是什么样的呢? Go 语言的链表实现在标准库的container/l ...

  8. 微信h5跳转小程序wx-open-launch-weapp开放标签不显示(已解决)

    前言: 前几天成功对接了跳转第三方小程序的功能,今天有个页面有需要对接.但是奇怪的是用的和上次一模一样的配置,但就是死活不显示wx-open-launch-weapp这个开放标签的按钮,看不到任何效果 ...

  9. nio之缓冲区(Buffer)理解

    一.缓冲区简介 Nio中的 Buffer 是用于存储特定基础类型的一个容器.为了能熟练的使用 Nio中的各种 Buffer , 我们需要理解 Buffer 中的 三个重要 的属性. 1. capaci ...

  10. Noip模拟6 2021.6.10

    T1 辣鸡 首先吐嘈一下,这题的测试点就离谱,不说了,附上我65分代码: 1 #include<bits/stdc++.h> 2 #define int long long 3 using ...