基于C#的波形显示控件的实现[附完整源码下载]

本文介绍了基于C#的波形显示控件的设计与实现,该控件支持多条数据曲线显示、友好坐标标尺、局部放大、自动坐标调整等功能。采用GDI+技术进行绘图,通过.NET用户控件实现代码重用。控件具有坐标值转换、坐标标尺绘制、数据点描绘、网格显示、工具栏按钮和右键菜单等功能。此外,还设计了演示程序展示控件使用方法和功能。该控件适用于自动化系统软件,提供了灵活的外观和颜色方案修改,方便集成到不同项目中。
摘要由CSDN通过智能技术生成

http://www.cnblogs.com/xf_z1988/archive/2010/05/11/CSharp_WinForm_Waveform.html#FIRST

编者记:

09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示),整个项目边学C# WinForm边设计,这个波形显示控件就是项目中的一部分,也花了自己绝大多数时间。暑假一结束,也就没有再去接触C#了,主要精力放在C++,Windows编程上去了。此外,顺便将该波形显示控件当作自己毕业设计的内容,下文实际上是节选自自己的本科毕业论文的呵呵,希望对大家能有所帮助。由于自己是个C#新手,所以代码以及文章有疏漏、错误、不妥之处在所难免,欢迎交流哈(现在看着十个月前写的代码,感想颇多......)

欢迎转载,但请注明出处(通宵整理排版 = =  很不容易的哈)http://www.cnblogs.com/xf_z1988/archive/2010/05/11/CSharp_WinForm_Waveform.html

(写这篇文章之时,大学再一个半月就结束了,目前在学C++、Windows编程、希望能找到个适合的工作吧)

“基于C#的波形显示控件”设计于09年暑假 源代码奉上呵呵:博客园下载 | CSDN下载 解压密码:CSharp_WinForm_Waveform

《基于C#的波形显示控件的实现》写于2009年9月   跳到文章目录(注意这里是采用锚链接,订阅的朋友访问会失效的,例如QQ邮箱中的订阅= = 还是访问原文吧)

“基于C#的波形显示控件的演示程序”为配套控件使用而设计的(演示程序源代码同控件源代码一起奉上了)

下面先上几张图,大家可以先了解最后做出来是个什么东西:

2010051113150755.jpg

2010051113172933.jpg

2010051113244061.jpg

再奉上两个波形显示控件的演示视频(两个视频内容差不多的呵呵):

摘    要

计算机技术的飞速发展使得其在自动化系统中的应用日益增强。大量监控、图像数据显示软件活跃在自动化工业及自动化教学领域。同时,软件系统的日益复杂化使得模块化开发变得尤为重要。本课题所设计的基于C#的波形显示控件就可在微软.NET平台下进行代码功能重用,达到模块化开发和快速开发的目的,使得程序员能够集中精力设计软件的具体业务流程,而不必担心波形呈现的问题。

本文先介绍了.NET平台下用户控件开发的基本方法,以及用C#描述的GDI+图形开发技术,然后提出一种基于C#的波形显示控件的设计思路,并对波形坐标值转换、坐标标尺、工具栏、局部放大等具体的设计细节进行详细解析。

本课题设计的波形显示控件实现了同时显示多条数据曲线、局部放大查看、波形显示自动调整最佳坐标范围、动态显示波形等功能。创新之处在于设计了一种方法,使得波形显示控件的坐标轴的起点值和终点值能够以浮点数显示,并自动根据当前波形显示控件的大小,描绘出符合用户视觉的坐标标尺。

最后,还设计了一个波形显示控件的演示程序,用于介绍该控件的使用方法以及功能测试,并提出了该波形显示控件可改进的地方。

关键词:波形显示控件;C#;GDI+;动态波形

目  录

(注意这里是采用锚链接,订阅的朋友访问会失效的,例如QQ邮箱中的订阅= = 还是访问原文吧)

1 绪论

  1.1 课题背景

  1.2 波形显示控件实现的功能

2 主要开发技术介绍

  2.1 .NET用户控件介绍

  2.2 GDI+技术介绍

3 波形显示控件整体设计

  3.1 数据存储结构的设计

  3.2 控件界面模块的设计

  3.3 控件工作流程的设计

4 波形显示控件各细节的实现

  4.1 坐标值和标尺的实现

    4.1.1 坐标相关的成员变量

    4.1.2 坐标标定权值的概念

    4.1.3 坐标标尺的绘制

    4.1.4 子标尺线的选择性显示

  4.2 数据点的描绘

    4.2.1 数据值转换为坐标值

    4.2.2 溢出坐标范围的数据点的处理

    4.2.3 遍历所有数据线并绘制出

  4.3 波形显示区域网格的实现

    4.3.1 网格相关的成员变量

    4.3.2 网格的绘制

  4.4 工具栏按钮的实现

    4.4.1 工具栏按钮相互关系

    4.4.2 工具栏提示标签的实现

  4.5 波形放大功能的实现

    4.5.1 局部放大选择框的实现

    4.5.2 放大选择框的鼠标操作

    4.5.3 放大选择框的按钮操作

    4.5.4 更新数据显示范围为放大的范围

  4.6 坐标自动调整及恢复默认坐标的实现

    4.6.1 坐标自动调整功能

    4.6.2 恢复默认坐标范围功能

  4.7 波形显示控件接口的实现

    4.7.1 控件基本属性

    4.7.2 控件外观样式

    4.7.3 控件绘图接口

  4.8 波形显示控件其他细节的处理

    4.8.1 坐标值产生遮盖时的处理

    4.8.2 波形显示控件大小改变时的处理

    4.8.3 按钮点击时进行禁用操作

    4.8.4 右键菜单的显示

    4.8.5 XML注释以及智能提示

5 波形显示控件功能的演示和使用

  5.1 波形显示控件演示程序的设计

  5.2 波形显示控件功能的演示

    5.2.1 外观样式的更改

    5.2.2 波形显示演示

    5.2.3 波形显示控件在实际项目中的使用

6 课题总结

参考文献

1  绪论

1.1  课题背景

波形显示控件广泛见于监控测量,图像数据显示等自动化相关软件中,更是组态软件必不可少的一部分。例如美国国家仪器有限公司(National Instruments)的NI Measurement Studio集成式套件以及LabView图形化程序开发环境等,都包含技术成熟的波形显示控件,功能丰富且强大。

目前购买成熟的自动控制相关的第三方控件库往往需要支付较高的费用,且大多数项目只用到些许专业性控件,例如一个喷管实验平台软件,图形用户界面只需要波形显示控件、U型差计控件和压力表控件,因此不适合科研机构以及中小型软件开发公司。所以掌握简单的控件开发技术,并开发属于自己团队或公司的控件库,从而降低软件开发成本,显得十分必要。

微软的.NET解决方案依据其对已有代码的互操作性、简化部署、分布式、高效开发等诸多优点,完全胜任自动化系统软件的开发。C#是微软为.NET平台开发的一门语言,通过.NET平台可以轻松使用GDI+技术开发可重用的用户图形界面控件。GDI+是目前在Windows窗体应用程序中以编程方式呈现图形的唯一方法,它使程序设计者可以创建图形、绘制文本以及将图形图像作为对象操作,旨在提供较好的性能并且易于使用。

波形显示控件因为涉及到坐标系、数据显示方式、精确度、实时性等因素,存在一定的开发难度。本课题意在使用微软.NET平台下的C#语言,提供一种坐标计算方法,解决自动调整最佳坐标范围,以符合用户视觉的方式显示坐标标尺,并通过GDI+技术显示波形数据,具有一定的实际开发参考价值。开发完成后的波形显示控件,可以快速嵌入到.NET平台下的软件工程中,开发者只需简单的操作,就可以使用该控件友好地显示波形数据,从而达到快速开发的目的。

回到目录

1.2  波形显示控件实现的功能

本课题所设计的波形显示控件,主要实现以下功能:

(1)    多条波形数据的显示。

该波形显示控件能够同时显示多条波形数据,用户能够控制每条波形数据的显示颜色、线宽、线帽、以及线转折的样式。并且提供了三种波形数据显示的方式:连续数据线、离散点、条形图。

(2)    友好坐标标尺的显示。

该波形显示控件能够根据当前显示数据的坐标范围,友好地显示坐标标尺。例如X轴坐标起始值为34.2,结束坐标值为100.7,则控件不是简单得将坐标10等分并显示并不友好的坐标值,而是通过计算当前波形显示控件的大小,显示40、50……这样的友好的坐标值,并判断是否需要继续在40到50的坐标值之间显示更小分度的坐标值。

(3)    波形显示区域网格的显示。

该波形显示控件可以显示同坐标标尺的坐标线相对应的网格,使得用户能够更直观地观察波形数据。

(4)    波形的局部放大。

该波形显示控件提供了波形局部放大的功能。并根据实际使用和测试,控制了波形放大的精度,以免产生数据溢出的问题。

(5)    坐标自动调整。

该波形显示控件能够根据当前要显示的波形数据的值,自动选择最佳的坐标范围,来直观地在控件的波形显示区域显示完整的波形曲线。

(6)    外观颜色方案的修改。

该波形显示控件能够修改外观样式,诸如背景色、网格颜色、坐标线颜色、坐标值颜色等都可以进行调整,以使控件外观能够符合软件整体风格。

(7)    其他细节。

该波形显示控件还设计了一个工具栏,可以方面地使用网格显示、局部放大、坐标自动调整、恢复默认坐标功能。另外还设计右键菜单,能够显示当前鼠标位置的具体坐标值,以及工具栏按钮的快捷按钮。

回到目录

2  主要开发技术介绍

2.1  .NET用户控件介绍

在微软.NET平台下,可以设计出在应用程序内部或应用程序之间提供一致性行为和用户界面的复合控件,即用户控件。用户控件可以是某个应用程序的本地控件,也可以编译成DLL供多个应用程序使用。

用户控件极大限度的帮助程序员进行代码重用和快速开发。通常用户控件通过继承UserControl基类,并组合微软提供的基础控件,如Button控件、PictureBox控件、Label控件等,然后进行功能的扩充和组合,从而创建出特定功能的用户控件。

在Visual Studio 2005下使用C#开发.NET用户控件,可以通过新建Windows控件库来实现。创建成功后软件会自动从UserControl基类继承一个类,并允许通过设计视图添加所需要的已有控件。

图 2‑1  设计用户控件界面

图 2‑1  设计用户控件界面

设计好大致的界面后,就可以着手设计具体的代码,用户控件通常通过对消息处理函数的编写,来实现特定的功能,并将控件中的各个模块联系起来。用户控件还需要设计出公开的接口属性和方法给控件的使用者,这样控件的使用者就能够调用公开的属性和方法,来实现对控件的操作和控制。另外,在编写控件的时候对各个属性和方法编写XML注释,并在生成控件的时候输出XML文档文件,这样控件使用者在使用该控件的时候,能够享受Visual Studio智能提示带来的便利。

编译运行后可以检查基本的控件效果:

图 2‑2  用户控件的调试运行

2010051104515174.jpg

最后可以通过项目属性设置程序集信息。

图 2‑3  设置程序集信息

2010051104593824.jpg

这样,一个用户控件就设计完成了。

用户控件自身不能独立作为程序运行,需要嵌入到特定的软件中。可以通过选择工具箱,添加新创建的.NET Framework组件,添加到工具箱中。其用法同微软提供的基础控件一样,可以通过拖拽的方式进行使用。

回到目录

2.2  GDI+技术介绍

GDI+是.NET Framework类库,用于进行图形编程。它是一种基于GDI的技术,GDI即Windows Graphical Device Interface,是Windows API(应用程序编程接口)中处理图形的部分。

GDI+是目前在Windows窗口应用程序中以编程方式呈现图形的唯一方法,它使程序设计者可以创建图形、绘制文本以及将图形图像作为对象操作,旨在提供较好的性能并且易于使用。

GDI+技术在Windows应用程序中得到了广泛的应用,使得Windows图形图像编程变得格外得容易。目前Windows平台下的大量应用软件的图形界面通过GDI+技术实现。利用GDI+技术可以方便地在屏幕、打印机或者其他输出设备上输出图形、文本等内容,程序员无需关心硬件设备和设备驱动,就可以编写出设备无关的应用程序。一些新兴的信息化软件通过GDI+技术能实现动态交互的高级效果,比如可视化电子地图。

在使用GDI+绘图之前,需要获得绘图对象Graphics,通常在编写控件的Paint事件时,Graphics对象可通过PaintEventArgs参数获得。所有的绘制过程都是面向对象的,例如实例化1像素的实线黑色画笔并绘制线条,可用如下的方式创建:

 
 

Graphics Grap = e.Graphics;
Pen p = new Pen(Color.Black);
Grap.DrawLine(p, 0, 0, 100, 100);
p.Dispose();

基于C#波形显示控件实现源码 计算机技术的飞速发展使得其在自动化系统中的应用日益增强。大量监控、图像数据显示软件活跃在自动化工业及自动化教学领域。同时,软件系统的日益复杂化使得模块化开发变得尤为重要。本课题所设计的基于C#波形显示控件就可在微软.NET平台下进行代码功能重用,达到模块化开发和快速开发的目的,使得程序员能够集中精力设计软件的具体业务流程,而不必担心波形呈现的问题。 本文先介绍了.NET平台下用户控件开发的基本方法,以及用C#描述的GDI+图形开发技术,然后提出一种基于C#波形显示控件的设计思路,并对波形坐标值转换、坐标标尺、工具栏、局部放大等具体的设计细节进行详细解析。 本课题设计的波形显示控件实现了同时显示多条数据曲线、局部放大查看、波形显示自动调整最佳坐标范围、动态显示波形等功能。创新之处在于设计了一种方法,使得波形显示控件的坐标轴的起点值和终点值能够以浮点数显示,并自动根据当前波形显示控件的大小,描绘出符合用户视觉的坐标标尺。 波形显示控件实现的功能 (1) 多条波形数据的显示。 该波形显示控件能够同时显示多条波形数据,用户能够控制每条波形数据的显示颜色、线宽、线帽、以及线转折的样式。并且提供了三种波形数据显示的方式:连续数据线、离散点、条形图。 (2) 友好坐标标尺的显示。 该波形显示控件能够根据当前显示数据的坐标范围,友好地显示坐标标尺。例如X轴坐标起始值为34.2,结束坐标值为100.7,则控件不是简单得将坐标10等分并显示并不友好的坐标值,而是通过计算当前波形显示控件的大小,显示40、50……这样的友好的坐标值,并判断是否需要继续在40到50的坐标值之间显示更小分度的坐标值。 (3) 波形显示区域网格的显示。 该波形显示控件可以显示同坐标标尺的坐标线相对应的网格,使得用户能够更直观地观察波形数据。 (4) 波形的局部放大。 该波形显示控件提供了波形局部放大的功能。并根据实际使用和测试,控制了波形放大的精度,以免产生数据溢出的问题。 (5) 坐标自动调整。 该波形显示控件能够根据当前要显示波形数据的值,自动选择最佳的坐标范围,来直观地在控件波形显示区域显示完整波形曲线。 (6) 外观颜色方案的修改。 该波形显示控件能够修改外观样式,诸如背景色、网格颜色、坐标线颜色、坐标值颜色等都可以进行调整,以使控件外观能够符合软件整体风格。 (7) 其他细节。 该波形显示控件还设计了一个工具栏,可以方面地使用网格显示、局部放大、坐标自动调整、恢复默认坐标功能。另外还设计右键菜单,能够显示当前鼠标位置的具体坐标值,以及工具栏按钮的快捷按钮。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值