基于C#的波形显示控件的实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

目录1绪论1.1课题背景1.2波形显示控件实现的功能2主要开发技术介绍2.1.NET用户控件介绍2.2GDI+技术介绍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.5XML注释以及智能提示5波形显示控件功能的演示和使用5.1波形显示控件演示程序的设计5.2波形显示控件功能的演示5.2.1外观样式的更改5.2.2波形显示演示5.2.3波形显示控件在实际项目中的使用6课题总结参考文献1绪论1.1课题背景波形显示控件广泛见于监控测量,图像数据显示等自动化相关软件中,更是组态软件必不可少的一部分。例如美国国家仪器有限公司(NationalInstruments)的NIMeasurementStudio集成式套件以及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控件等,然后进行功能的扩充和组合,从而创建出特定功能的用户控件。在VisualStudio2005下使用C#开发.NET用户控件,可以通过新建Windows控件库来实现。创建成功后软件会自动从UserControl基类继承一个类,并允许通过设计视图添加所需要的已有控件。图2-1设计用户控件界面设计好大致的界面后,就可以着手设计具体的代码,用户控件通常通过对消息处理函数的编写,来实现特定的功能,并将控件中的各个模块联系起来。用户控件还需要设计出公开的接口属性和方法给控件的使用者,这样控件的使用者就能够调用公开的属性和方法,来实现对控件的操作和控制。另外,在编写控件的时候对各个属性和方法编写XML注释,并在生成控件的时候输出XML文档文件,这样控件使用者在使用该控件的时候,能够享受VisualStudio智能提示带来的便利。编译运行后可以检查基本的控件效果:图2-2用户控件的调试运行最后可以通过项目属性设置程序集信息。图2-3设置程序集信息这样,一个用户控件就设计完成了。用户控件自身不能独立作为程序运行,需要嵌入到特定的软件中。可以通过选择工具箱,添加新创建的.NETFramework组件,添加到工具箱中。其用法同微软提供的基础控件一样,可以通过拖拽的方式进行使用。回到目录2.2GDI+技术介绍GDI+是.NETFramework类库,用于进行图形编程。它是一种基于GDI的技术,GDI即WindowsGraphicalDeviceInterface,是WindowsAPI(应用程序编程接口)中处理图形的部分。GDI+是目前在Windows窗口应用程序中以编程方式呈现图形的唯一方法,它使程序设计者可以创建图形、绘制文本以及将图形图像作为对象操作,旨在提供较好的性能并且易于使用。GDI+技术在Windows应用程序中得到了广泛的应用,使得Windows图形图像编程变得格外得容易。目前Windows平台下的大量应用软件的图形界面通过GDI+技术实现。利用GDI+技术可以方便地在屏幕、打印机或者其他输出设备上输出图形、文本等内容,程序员无需关心硬件设备和设备驱动,就可以编写出设备无关的应用程序。一些新兴的信息化软件通过GDI+技术能实现动态交互的高级效果,比如可视化电子地图。在使用GDI+绘图之前,需要获得绘图对象Graphics,通常在编写控件的Paint事件时,Graphics对象可通过PaintEventArgs参数获得。所有的绘制过程都是面向对象的,例如实例化1像素的实线黑色画笔并绘制线条,可用如下的方式创建:GraphicsGrap=e.Graphics;Penp=newPen(Color.Black);Grap.DrawLine(p,0,0,100,100);p.Dispose();若填充一个区域的颜色,则代码样式如下所示:SolidBrushb=newSolidBrush(Color.Red);Grap.FillRectangle(b,0,0,10,10);b.Dispose();其直观的操作方式使得程序员能快速绘制椭圆,椭圆弧,矩形,贝塞尔曲线,路径等。通过GDI+技术创建自定义控件能实现各种功能。只需要在建立自定义控件后,编写响应Paint事件的代码,通过GDI+技术绘制必须的图形,就可以控制自定义控件的外观。本课题设计的波形显示控件,大量得运用了GDI+技术进行绘图操作,使得控件能够呈现出出色的界面效果。回到目录3波形显示控件整体设计3.1数据存储结构的设计本课题设计的波形显示控件主要用于显示数据点集合。数据点集合具有大小不确定性,因此可以使用.NET提供的泛型支持,其主要的优点是性能,因此要显示的数据集合可以使用泛型集合中的ListT类存储,ListT类可以动态增大和减少其容量。同时考虑到波形显示控件需能够同时显示多条曲线,且数据点集合根据X轴的值和Y轴的值分别创建Listfloat。经过上面分析,得出波形显示控件内部需要创建两个ListListfloat对象,一个用于存储要显示的数据点集合的X轴值的引用,另一个用于存储要显示的数据点集合的Y轴值的引用。另外,还需要创建Listcolor、Listint、ListLineJoin、ListLineCap、ListDrawStyle分别来存储每条要显示的数据点集合的颜色、线条宽度、连接点样式、起始线帽、样式。其中DrawStyle为自定义枚举,用于标识画图样式:线条、点或者条形图。具体代码设计如下所示:publicenumDrawStyle{Line,dot,bar}privateListListfloat_listX=newListListfloat();//X轴数据集privateListListfloat_listY=newListListfloat();//Y轴数据集privateListColor_listColor=newListColor();//线条颜色privateListint_listWidth=newListint();//线条宽度privateListLineJoin_listLineJoin=newListLineJoin();//连接点privateListLineCap_listLineCap=newListLineCap();//起始线帽privateListDrawStyle_listDrawStyle=newListDrawStyle();//样式由上面可知,波形显示控件实际上本身是不存储实际的数据值的,而相当于存储了要显示的数据的“引用”,即实现的是一个无源控件,这样有利于数据处理层和数据呈现层的分离,使软件更趋向于模块化。另一方面,为实现多波形显示带来了效率:只需引用传递波形显示控件要显示的数据,而无需整体地复制所有的显示数据给波形显示控件。回到目录3.2控件界面模块的设计控件的界面可以通过使用微软提供的基础控件进行布局。首先使用5个pictureBox控件分别表示底部的X轴坐标区域、左侧的Y轴坐标区域、顶部标题栏区域、右侧工具栏区域、以及中间的波形显示区域。除中间波形显示区域的pictureBox控件外,其余4个pictureBox控件大小有所限制,这样有助于坐标显示的计算。具体参数如下表所示:表格3-1控件界面5大模块区域控件类型控件名称控件大小底部X轴坐标区域PictureBoxpicture

1 / 46
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功