写在前面:

上次给大家看了一个上位机界面之后,很多人表示对那个仪表盘的开发感兴趣,今天就跟大家分享一下整个的开发过程,由于整个仪表盘开发的过程还是有些复杂的,无法将所有的代码都一一展示,所以重点跟大家分享一下开发的思路,毕竟每个人都会有自己的想法和风格。

01

效果图展示

先给大家看看实际项目中的应用效果图:

图表 1 项目效果图

对于这种仪表盘控件的开发,只能通过GDI+来实现。实际使用中,我们可以根据需要设置不同的样式,包括颜色、角度、量程等等,下面给大家展示一下:

图表 2 控件使用图

02

控件开发过程

GDI+开发控件其实并不是特别难,但是会比较复杂,涉及的东西比较多,需要有一定的空间想象能力,甚至是数学几何基础。

任何一个复杂的GDI+控件,里面无非就是字段(Field)、属性(Property)、方法(Method)、委托(Delegate)以及事件(Event)。其实属性是灵魂,GDI+设计及绘制就是围绕属性来进行开发的。

我们拿到这样一张效果图之后,第一步要做的事情是,确定需要设计哪些属性?

A:仪表盘部分:

(1)      GaugeColor:设置或获取仪表盘的边框颜色

(2)      PointerColor:设置或获取仪表盘的指针颜色

(3)      RangeMin:设置或获取量程的最小值

(4)      RangeMax:设置或获取量程的最大值

(5)      CurrentValue:设置或获取当前数值

(6)      RangeAlarmMin:设置或获取量程报警最小值

(7)      RangeAlarmMax:设置或获取量程报警最大值

(8)       TopGap:设置或获取整个控件的上下间隙

(9)       LeftGap:设置或获取整个控件的左右间隙

(10)   PointerRadius:设置或获取中心原点的半径

(11)   AlarmColor:设置或获取报警线的颜色

B:刻度值部分

(1)      BigScaleCount:设置或获取大刻度数量

(2)      SmallScaleCount:设置或获取小刻度数量

(3)      IsAllowFullCircle:设置或获取是否允许整圆显示

(4)      ScaleWidth:设置或获取刻度值的最大宽度

(5)      ScaleHeigth:设置或获取刻度值的最大高度

C:文本显示部分

(1)      TextColor:设置或获取文本颜色

(2)      UnitText:设置或获取显示单位

(3)      IsTextVisiable:设置或获取文本内容是否显示

(4)      TextGap:设置或获取文本显示位置与刻度的间距

通过一系列的分析之后,确定了设计以上20种属性,确定属性之后,即可通过重写OnPaint事件进行重绘,重绘步骤又是怎样的呢?

(1)      确定整体核心三要素(中心点、偏移角度、圆环半径)

(2)       绘制大刻度

(3)       绘制小刻度

(4)       绘制刻度值

(5)       绘制文本

(6)       绘制实时值指针

(7)       绘制报警框

写在最后:

本文旨在结合GDI+的相关技术介绍了一个仪表盘控件开发的整个过程,自定义控件在上位机开发中应用非常广泛,除了GDI+绘制控件以外,还有扩展控件和组合控件的应用。对于从事上位机开发的学员来说,学好GDI+是非常有必要的,可以大大增加你项目的扩展性和可视性。

更多精彩内容:

(点击即可阅读)

上位机C#通过OPCUA和西门子PLC通信

上位机开发之三菱FX3U以太网通信实践

基于C#实现本地数据上传至云服务器

上位机开发之三菱Q系列PLC通信实践

基于S7-PLCSIM Advanced搭建S7通信仿真环境

pb中控件变颜色_基于GDI+技术开发工业仪表盘控件相关推荐

  1. chart控件做实时曲线显示_基于GDI+技术开发工业仪表盘控件

    写在前面 上次给大家看了一个上位机界面之后,很多人表示对那个仪表盘的开发感兴趣,今天就跟大家分享一下整个的开发过程,由于整个仪表盘开发的过程还是有些复杂的,无法将所有的代码都一一展示,所以重点跟大家分 ...

  2. 怎样用C#写一个工业仪表盘控件

    如何使用C#开发一个如上的工业仪表盘控件呢? 1写一个类继承自UserControl,我们给它起名为Dial 2定义他的刻度属性,   public int V//当前刻度1,省略VV(刻度2)    ...

  3. android什么控件能够输入多行文字,Android开发:文本控件详解——EditText(一)基本属性...

    一.简单实例: EditText输入的文字样式部分的属性,基本都是和TextView中的属性一样. 除此之外,EditText还有自己独有的属性. 二.基本属性: hint 输入框显示的提示文本 te ...

  4. 实现picturecontrol控件显示图片_陕西曝光机触摸屏实时数据控件

    随着市场需求的快速发展,PCB行业对产能的要求与日俱增.为了在保证品质的前提下快速提高产能,PCB曝光领域掀起了一场新的革命,那就是对传统曝光机进行UVLED改造,用UVLED光源代替传统汞灯.目前市 ...

  5. 常用MFC控件基础使用(Edit Button Check Combo Tree 显示位图 控件大小自适应、线程、右键菜单、控件调整移动、MFC背景)

    常用MFC控件基础使用 1.Edit Control 2.Button控件 3.Check控件 4.Combo Box 5.Tree 控件 5.快捷键设置 6 显示缓冲区位图 7 窗口自适应大小 8 ...

  6. 命令父窗口变颜色_【编程】第五期:Python Tkinter图形化教程03布局之父窗口、pack和LabelFrame...

    这一讲的内容巨多,建议反复观看. 1. LabelFrame 2.父窗口 3.pack布局 首先是控件LabelFrame(好东西) LabelFrame是一个容器,一个盒子,可以当父窗口(所有控件都 ...

  7. 帆软按钮控件变查询_帆软报表(多sheet)自定义分页查询

    三.添加自定义按钮以及JS事件 1.打开'模板Web属性' 2.选中'填报页面设置',修改2)为'为模板单独设置',3)中是前面七个是添加的自定义按钮:通过4)按钮进行设置:5)操作是添加'加载结束' ...

  8. Arduino开发(二)_基于Arduino UNO开发板的RGB灯光控制方法

    Arduino开发(二)_基于Arduino UNO开发板的RGB灯光控制方法 首先,我们来看一下Arduino UNO开发板的具体引脚排列,如下图所示, 再了解一下三色RGB LED模块,如下图所示 ...

  9. python webkit内核_Winform调用WebKitBrowser,基于chrome内核WebKit的浏览器控件

    在C#中,默认的WebBrowser控件默认使用的是IE的core,而IE的种种遭人吐槽的诟病使我不敢轻易使用WebBrowser,因此,打算使用Chrome的内核替换IE.Chrome的内核使用的是 ...

  10. 使用GDI+实现圆形进度条控件的平滑效果

    DownLoad Src 传统的GDI绘制图形时的一个致命缺点是图像存在锯齿毛糙, 使用GDI+能绘制漂亮的渐变图像并有光滑图像的功能.利用GDI+对圆形进度条控件进行修改,效果如下:

最新文章

  1. 拆卸台式电脑主机,cpu,硬盘,内存条等
  2. 【Network Security!】ping命令的用法(全)
  3. layui表格 设置默认排序_layui table对表格数据处理后的排序问题
  4. nowcoder 河 我 车 题 错 天 乐 赛 倍增处理
  5. oracle02070,ORA-02070:database does not support semijoin错误 | 信春哥,系统稳,闭眼上线不回滚!...
  6. C++工作笔记-设计普通类的格式,实现简单工厂中接口的定义
  7. 公交/地铁出行测试点
  8. Unity3D基础8:C#脚本
  9. 无向图是欧拉图的充要条件_500页开放书搞定概率图建模,图灵奖得主Judea Pearl推荐...
  10. 十一、K8s 健康性检查
  11. sql server 2012序列号密钥
  12. MySQL讲义第 53 讲——select 查询之 select 语句执行过程分析
  13. 输入数字转换成英文输出
  14. 如何把pacs系统移到新服务器,PACS系统数据管理迁移解决方案(8页)-原创力文档...
  15. l2范数求导_稀疏编码学习笔记(二)L2范数
  16. Taste/Thoth:Taste Architecture 概览【转Beyond Search】
  17. Latex调整行间距
  18. 视频编解码——视频编解码器工作原理
  19. Google I/O 2021 发布 Flutter 2.2
  20. 什么是kotlin?

热门文章

  1. 阶段3 2.Spring_10.Spring中事务控制_2 作业-基于注解的AOP实现事务控制及问题分析_上...
  2. 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_3 基于注解的自定义再分析
  3. [SCOI2005]骑士精神
  4. 【华为机试】—— 12字符串反转
  5. FFT(快速傅里叶变换):UVAoj 12298 - Super Poker II
  6. Ubuntu 配置VNC时,出现“perl: warning: Falling back to the standard locale (C).”等提示错误解决方法...
  7. Matplotlib简介和pyplot的简单使用——subplot
  8. Windows via C/C++ 学习(6)内核对象
  9. 课程设计第一次实验总结
  10. SP1812 LCS2 - Longest Common Substring II