最近接了个小项目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. 【C++ Primer Plus】编程练习答案——第3章

    1 void ch3_1() { 2 using namespace std; 3 unsigned int factor = 12; 4 unsigned int inch, feet; 5 cou ...

  2. bash是什么?

    bash shell就是一个bash程序 ​ --解释器,启动器 ​ --解释器: ​ 用户交互输入 如vim 文本文件输入 脚本本质: !/bin/bash !/usr/bin/python 读取方 ...

  3. Node.js Koa框架学习笔记

    Koa 基本介绍 Koa是Node.js中非常出名的一款WEB框架,其特点是短小精悍性能强. 它由Express原版人马打造,同时也是Egg框架的设计蓝图,可以说Koa框架的学习性价比是非常高的. 官 ...

  4. 1.1 jvm核心类加载器--jdk源码剖析

    目录 前提: 运行环境 1. 类加载的过程 1.1 类加载器初始化的过程 1.2 类加载的过程 1.3 类的懒加载 2. jvm核心类加载器 3. 双亲委派机制 4. 自定义类加载器 5. tomca ...

  5. Java基础语法(语法、位运算、JavaDoc等)

    一.注释.标识符.关键字 1.注释(comments) 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己编写的代码,但是当项目结构一旦复杂起来,我们就需要用到注释了! 注释并不会被程序执行, ...

  6. bzoj4821 && luogu3707 SDOI2017相关分析(线段树,数学)

    题目大意 给定n个元素的数列,每一个元素有x和y两种元素,现在有三种操作: \(1\ L\ R\) 设\(xx\)为\([l,r]\)的元素的\(x_i\)的平均值,\(yy\)同理 求 \(\fra ...

  7. JVM:内存模型

    JVM:内存模型 说明:这是看了 bilibili 上 黑马程序员 的课程 JVM完整教程 后做的笔记 1. java 内存模型 很多人将[java 内存结构]与[java 内存模型]傻傻分不清,[j ...

  8. 易维巡APP技术支持

    亲爱的用户 如果您在使用我们的产品时遇到任何问题,请随时与我们联系,我们将全力全意为您解决! 请发邮件与我们联系,我们将24小时为您服务! 电话:18251927768 邮箱地址:xshm999@16 ...

  9. Noip模拟10 2021.6.27

    T1 入阵曲 好了,又一个考试败笔题. 也就是在那个时候,小 F 学会了矩阵乘法.让两个矩阵乘几次就能算出斐波那契数, 真是奇妙无比呢. 不过, 小 F 现在可不想手算矩阵乘法--他觉得好麻烦.取而代 ...

  10. [源码解析] PyTorch 如何实现后向传播 (4)---- 具体算法

    [源码解析] PyTorch 如何实现后向传播 (4)---- 具体算法 目录 [源码解析] PyTorch 如何实现后向传播 (4)---- 具体算法 0x00 摘要 0x01 工作线程主体 1.1 ...