(测试计量技术及仪器专业论文)vxi总线测试软件平台控件基类的设计和实现.pdf_第1页
(测试计量技术及仪器专业论文)vxi总线测试软件平台控件基类的设计和实现.pdf_第2页
(测试计量技术及仪器专业论文)vxi总线测试软件平台控件基类的设计和实现.pdf_第3页
(测试计量技术及仪器专业论文)vxi总线测试软件平台控件基类的设计和实现.pdf_第4页
(测试计量技术及仪器专业论文)vxi总线测试软件平台控件基类的设计和实现.pdf_第5页
已阅读5页,还剩58页未读, 继续免费阅读

(测试计量技术及仪器专业论文)vxi总线测试软件平台控件基类的设计和实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子科技大学硕士论文 摘要 自动测试程序的软件开发平台在自动测试系统中占有重要的地位,它是组建 自动测试系统的软件开发工具。经过多年的努力,我们课题组成功研制了一种基 于w i n d o w s 操作系统之上的图形化测试软件开发平台一“v x i 总线测试软件平 台”。该平台提供丰富的图形编程接口和方便的图形操作界面,用户只需通过鼠 标连接图标而不需要熟悉高级编程语言就能方便的组建自动测试系统。提高用户 编制测控程序的效率和缩短开发周期,同时实现了测控领域软件平台的国产化, 在国内属首创。该平台主要适用于各种酒4 试、控制、故障分析及信息处理软件的 开发。本硕士学位论文是根据作者在该课题中所承担的任务撰写完成的。 “v x i 总线测试软件平台”作为测试应用的集成开发环境提供了大量的编程 接口( 控件) ,和丰富的跟踪调试手段:此外作为图形化的编程语言还提供友善 的编程界面及简便直观的运行界面( 面板、虚拟仪器控制器) 。本论文主要讨论 平台控件基类的设计和实现。包括控件基类界面、控件属性表、控件引脚、端口 和控件对连线支持功能的设计和实现。本文第一章讨论了平台的研制意义、开发 工具和相关技术。第二章讲述c 抖的封装、继承、多态性的基本概念,对控件基 类作了详尽的功能分析并介绍了控件基类的设计思路。第三章讲述控件基类界面 的设计和实现,包括控件各功能模块、控件界面、控件最小化功能、控件的重排 功能、控件的存储和读取功能的设计和实现。第四章讲述控件属性表各属性页的 设计以及通过属性表修改控件显示特性功能的实现。第五章讲述控件引脚、端口 及对连线支持功能的设计和实现,详细讨论了引脚和端口的外观设计、引脚间的 数据传递功能、控件引脚的添加和删除功能、控件对连线支持功能的设计和实现。 第六章介绍具体控件的设计和实现,讲述了如何从控件基类派生具体的控件类, 如何在视图中完成控件的创建工作,以及部分流程类控件和显示类控件的设计和 实现。第七章主要对平台的完善和改进阐述了一些个人的建议和想法。 关键词:测试软件开发平台,基类,控件,引脚,端口 电子科技大学硕士论文 a b s t r a e t t h e d e v e l o p i n gp l a t f o r mo f t h ea t p ( s u t o t e s tp r o g r a m ) i sm u c h i m p o r t a n ti nt h e a u t ot e s ts y s t e m s i tp r o v i d e ss o f h , a r ed e v e l o p i n gt o o l sa n de n v i r o n m e n tf o ra t s ( a t u o t e s ts y s t e m ) t h r o u g ho u re f f o r tf o ry e a r s ,w eh a v ed e v e l o p e dv x a _ b u st e s ts o f t w a r e p l a t f o r mb n i ko i lw i n d o w so p e r a t i o ns y s t e m u s e rc a nb u i l da t sc o n v e n i e n t l y t h r o u g h t h es o f t w a r ew i t h o u tk n o w i n ga d v a n c e dp r o g r a m m i n gl a n g u a g e t h i sm a s t e r d i s s e r t a t i o nw a sw r i t t e nw j t hm yc o n t r i b u t i o nt ot h i sc o m p u t e rs o f t w a r e a sad e v e l o p m e n te n v i r o n m e n to fa t s ,t h ep l a t f o r mp r o v i d e sa b u n d a n tg r a p h i c p r o g r a m m i n g i n t e r f a c ea n dc o n v e n i e n td e b u g g i n go rr u n n i n gm o d e b e s i d e st h e s e ,i t p r o v i d e sf r i e n d l yp r o g r a m m i n g a n d r u n n i n g i n t e r f a c e t h i st h e s i sd i s c u s s e st h eb a s ec l a s s d e s i g n o ft h e g r a p h i cp r o g r a m m i n g i n t e r f a c eo ft h ev x i b u st e s ts o i i w a r ep l a t f o r mw i t he m p h a s i s t h ec o n t e n ta s f o l l o w i n g : c h a p t e r o n ei n t r o d u c e st h e s i g n i f i c a t i o n ,t h ed e v e l o p i n g t o o la n dt h e t e c h n o l o g yo f v x i _ b u s t e s ts o f t w a r ep l a t f o r m c h a p t e rt w o d i s c u s s e st h ed e s i g n p r o p o s a l o f t h ec o n t r o lb a s ec l a s s c h a p t e r t h r e ed i s c u s s e st h ed e s i g na n dr e a l i z a t i o no f t h ei n t e r f a c eo f m cc o n t r 0 1 c h a p t e rf o u rd i s c u s s e st h ed e s i g na n d r e a l i z a t i o no ft h ep r o p e r t ys h e e to ft h e c o n t r 0 1 c h a p t e rf i v ed i s c u s s e s t h ed e s i g na n dr e a l i z a t i o no ft h e1 , i n , t h et e r m i n a la n dt h e s u p p o r t i n gf u n c t i o n o f t h ec o n t r o lt ot h el i n e c h a p t e rs i xd i s c u s s e st h ed e s i g na n dr e a l i z a t i o n o fs o m ef l o wc o n t r o l sa n d d i s p l a yc o n t r o l s c h a p t e rs e v e ng i v e ss o m e a d v i c ea n d t h i n k i n gt oi m p r o v e t h ep l a t f o r m k e gw o r d sv x ib u s t e s ts o f t w a r ep l a t f o r m ,b a s ec l a s s ,c o n t r o l ,p ht e r m i n a l 电子科技大学硕士论文 独创- 胜声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其 他人已经发表或撰写过的研究成果,也不包含为获得电子科技大学或其它教育机 构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献 均已在论文中作了明确的说明并表示谢意。 签名:! 茎查! 塾日期:”睥 月毒日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) - 签名:垦导师签名: 日期:硼年月3 日 电子科技大学硕士论文 第一章引言 1 1 “v x i 总线测试软件平台”概述 “v x i 总线测试软件平台”研制的目标是提供一套具有自主版权的面向测 试领域的图形化编程软件。解决v x i 总线系统硬件和软件的标准化,同时兼 容其它总线自动测试系统软件的开发,从而提高系统的互用性,使之更易于 集成和应用。并经实际使用之后,逐步完善,提高版本,以推动我国v x l 总线 测试系统的发展。 “v x i 总线测试软件平台”作为测试应用的集成开发环境必须提供丰富 的编程元素,同时提供方便的调试和运行方式;此外作为图形化的编程语 言还要提供友善的编程界面及简便直观的运行界面。使用该软件平台的用 户不需要熟悉高级编程语言就能方便的组建自动测试系统,提高用户编制测控程 序的效率和缩短开发周期。 1 2 课题在理论和实际应用方面的意义和价值 国内已有许多院校、研究所和公司在自动测试领域的系统集成和软硬件开发 方面做了许多研究工作,但在软件平台级的产品上尚无图形化的测控系统开发软 件,国内在该领域的研究还处于空白。因此,该课题无论在理论还是在实践上都 具有重要的意义和价值。 1 3 几种可视化测试软件开发平台的分析比较 目前,国外的测试软件平台主要有两个厂家的产品:a g i l e n t 公司的 a g i l e n tv e ep r o ( v e e ) ,n i ( n a ti o n a li n s t r u m e n t ) 公司的l a b w i n d o w s c v i 和l a b v i e w 。这两个厂家的产品在铡控领域起着主导地位。 v e e 是为优化编写测量方面的应用程序而设计的一个可视化编程语言 ( 也称之为图形化编程语言) ,可以在不同操作系统的支持下,开发驱动及测试 软件,具有良好的操作界面。v e e 也可以用其他语言( 如c ,c + + ,p a s c a l 和 f o r t r a n ) 编写的程序模块作为库函数来使用。 美国n i 公司的l a b v i e w 也是一种图形化的编程工具,其界面同v e e 一 样友好,编程也很方便。该软件平台由三部分组成:前面板( 即用户界面) 、编 程平台及图标和联接器。与v e e 不同的是它把编程元素的设计与界面控件的 设计相分离,两者之间通过联接器又相互关联,这样就给编程和设计提供了更 电子科技大学硕士论文 大的灵活性。l a b v i e w 提供了在平台上编写仪器软面板的功能,并可仿真其测 控环境,同时提供了若干个开发工具,方便测试程序的编写。它还具有很好的 兼容性。 l a b w i n d o w s c v i 也是美国m 公司推出的一套面向测控领域的软件开发平 台。它以a n s ic 为核心,将功能强大,使用灵活的c 语言平台与数据采集, 分析和表达的测控专业工具有机地结合起来。它的集成化开发平台,交互式编 程方法,丰富的控件和库函数方便用户进行二次开发。为熟悉c 语言的开发人 员建立检测系统、自动测量环境、数据采集系统及过程监控系统等提供了一个 理想的软件开发工具。 1 4 测试软件平台的操作系统、开发工具的选择和相关技术 在操作系统的选择上,考虑到向下兼容和以后的升级,我们选择了 w i n d o w s 2 0 0 0 操作系统( 兼容w i n d o w s 9 8 ) ,并在此环境下,利用v i s u a lc + + 6 0 作为本系统的开发工具。主要基于以下两点考虑: 第一w i n d o w s2 0 0 0 作为3 2 位操作系统被广泛地使用,它继续支持1 6 位应 用程序,具有很好的向下兼容性,可随m i c r o s o f t 公司产品的不断升级而发展。 目前大多数的钡4 试软件开发平台如l a b w i n d o w c v i 、l a b v i e w 、a g i l e n tv e e 等都 采用w i n d o w s 系统作为操作系统平台。另外,w i n d o w s 提供了丰富的图形接口, 为图形化开发提供了便利条件。 第二v i s u a lc + + 6 0 不仅提供了良好的编程环境,而且用它编写程序代码 在速度上较快,对底层的处理也较方便,其数据封装、继承机制和多态性为我们 的设计和编程提供了便利。m f c 封装了大部分的w i n d o w sa p i 函数,具有强大的 功能,方便编程和软件的维护、升级。 “v x i 总线测试软件平台”使用的技术点主要包括:面向对象( o o p ) 的 编程、w i n d o w s 的消息驱动、w i n d o w s 的消息映射、m f c 的文档视结构、文档 保存机制、w i n d o w s 的多线程编程等。本课题使用到的关键技术包括:面向对 象编程,w i n d o w s 的消息映射,c + + 的封装、继承和多态性等。 1 5 毕业设计所完成的工作 本人于2 0 0 1 年6 月进入该项目缎,在导师的悉心指导下,与项目组成 员一起,努力完成了以下的工作: 控件基类的设计和实现,包括控件界面,控件属性表,控件弓j 脚、端口 2 电子科技大学硕士论文 及控件对连线支持功能的设计和实现。 流程类控件的设计和实现,包括条件比较控件、选择输出控件、变数循 环控件、延时控件的设计和实现。 显示类控件的设计和实现,包括数据显示控件、列表显示控件、图片控 件的设计和实现。 电子科技大学硕士论文 第二章控件基类设计方案简介 2 1 面向对象编程简述 近年来,面向对象0 0 ( o b j e c t o r i e n t e d ) 技术受到人们的普遍重视,对它 的研究遍及计算机软件各个领域,被认为是9 0 年代的核心技术之一。0 0 方法 与技术是一种围绕真实世界概念来建造对象模型的全新的解决问题方式,它可 使软件人员摆脱结构程序设计的框框,从应用的角度来思考问题,更好的理解 用户的需求。面向对象程序设计语言具有三个共同特点: 封装:把有关一个对象实体的属性以及属性控制方法组合在一起称为封装, 封装是借助于一个新的结构和数据机制一类来实现的。一个类对象是既含有 数据又含有处理该数据的代码的一个逻辑实体。 继承:继承是一对象获取另一对象某些性质的过程。它从一个或多个先前定 义的基类中继承数据和行为,并且可以重新定义或增加新的数据和行为,这 样就建立了类的层次。 多态性:所谓多态,即一个名字,多种语义;或相同接口,多种实现。通过 函数重载和虚函数来实现。函数重载强调的是函数名相同,函数参数和函数 体不同;虚函数则强调单接口多实现版本。 根据继承机制,一个子类可自动继承其父类的部分描述( 属性、方法和事 件) 。因此,任何一个类将继承层次结构中上层所有类的全部特性。 2 2 控件和控件基类概述 控件是“v x i 总线测试软件平台”中的编程元素,每个控件用一特定的图 标或窗口( w i n d o w s 环境中) 来表示。作为一个编程元素,控件可以代表一台仪 器,也可以代表一个控制元素( 如循环,条件分支) 或是一个与用户交互的界 面( 如输入出框,显示框) 。控件按其功能可分为五大类:流程控制类,数据 类,数据处理和设备类,数据显示类,y o 类。 平台控件的种类繁多,功能各异,但它们却具有许多共同的特性。每一个 具体v x i 控件就是一个包含了所有控件的共同特征,并具有自己特有行为方式 的集合。利用面向对象的方法,把各个控件的共同特征提取出来,形成一个控 件基类。在控件基类中实现所有控件的共有功能,并制定一系列标准的接口规 范供派生类( 具体的控件) 调用。在设计具体的某个控件时,只需从控件基类派 4 电子科技大学硕士论文 生下来,再增加自己特有的成员变量和完成特定功能的成员函数或根据需要重 新定义基类的某些虚函数,就形成既包含了所有控件共同特征又具有自己特定 功能的控件。从而为具体控件的界面和程序设计提供便利,大大节约了成本, 减小了出错率。控件基类的设计思想基于: 实现所有控件具有的共性; 为派生类提供统一,标准的接口: 为具体控件特定功能的设计提供便利; 2 3 控件基类功能分析 “v x l 总线测试软件平台”的控件具有统一的外观模式和数据传递模式, 控件要求其基类完成如下功能: 第一完成控件的界面设计,包括: 提供面板视控件和编程视控件的界面模板; 提供控件最大化和最小化显示功能; 提供通过鼠标拖动改变控件大小的功能; 完成控件的存储和读取; 第二完成控件属性维护,包括: 控件名称维护: 控件背景颜色维护; 控件显示文本颜色、字体及显示风格维护; 控件标题栏维护( 显示或不显示) ; 控件标题栏显示文本的颜色、字体和显示风格维护: 控件调试断点维护( 设置和取消) ; 第三实现控件间数据传递功能,包括: 控件输入输出参数的设置; 控件间数据对应关系设置; 实现对连线和运行的支持; 5 电子科技大学硕士论文 图2 一l 是一个典型的编程视控件界面外观,左图显示了控件最小化时的 外观,右图显示了控件最大化时的外观。 图2 1 2 4 控件基类设计思路 窗口类( c w n d ) 是m f c 类库中其他窗口类的基类,提供大量的方法对窗口属性 进行维护和对窗口消息进行处理。利用窗口的消息处理机制和方法可以方便控件 功能的实现。利用m f c 封装的丰富的基本控件类创建编程控件子窗口,并把其操 作和数据封装在基类的实现中。 根据图2 1 所示的控件外观特性,我们选定控件基类c b a s e ( 以下简称为基 类) 的父类为c w n d ,在c b a s e 类中用成员变量描述控件公共特性,用类的方法实 现控件公共特性的维护以及提供开放的控件接口。其它控件类都是从基类派生。 c w n d 类、控件基类和其派生控件类的类层次结构如图2 - 2 所示。 c n d 一一n d + ( ) 个 一v i e v f i b t :b o 口1 1 l p v i c w n d + c r eb te ( ) c ) :b o o l + r e p l c e o 。x c o n t r o “b lb v 【s t b l 自) ( ) i d + o n p r o c e s s n o wc p r u p a r a ml p a r a l i1 p a ( ) l d + f ) 图2 2 通过在窗口( c w n d 类) 中添加不同的子窗口( 菜单按钮、最小化按钮、端口、 标题栏) 以及通过窗口的自画技术( 如控件的背景颜色、边框和引脚) 来完成控件 基类的外观显示功能。 6 电子科技大学硕士论文 设计控件属性表,允许平台的用户通过属性表设置来改变控件的属性。 设计控件上、下、左、右四个方向上的引脚分别完成控制流输入、控制流输 出、数据流输入和数据流输出的功能。 2 5 本章小结 本章首先介绍面向对象编程的基本思想,然后根据平台各控件具有很多共 性的特点,提出了为平台中的所有控件设计一个基类的设计思路。最后对控件 基类的功能进行了详尽的分析,并简单介绍了控件基类的设计思路。本文接下 来的几章将分别讲述控件各部分功能的设计和实现,包括:控件界面的设计和 实现;控件属性表( 维护控件属性) 的设计和实现;控件引脚、端口及对连线支 持功能的设计和实现。 7 电子科技大学硕士论文 3 1 概述 第三章控件界面的设计和实现 控件基类完成控件的显示特性和数据传递功能( 数据传递功能将在第五章进 行论述) 。使派生类专注于控件运算功能的实现,而不必考虑控件的总体外观和 数据传递方式,这将大大减少派生类的工作量和出错率。在控件基类中包含了 表示外特性对象的成员变量和操作这些对象的成员函数。控件基类还提供一些 虚函数接口供派生类完成自己特定的功能。 为了方便管理及减少代码重复,根据图2 1 所示的外特性,将控件划分为 如下功能模块: 控件菜单按钮 控件最小化按钮 控件标题栏 控件引脚 控件端口 将以上各功能模块单独设计为类,同时,设计引脚信息类管理控件的引脚 信患。并在基类的设计中使用这些类对象来完成控件的相关功能。 3 2 控件各功能模块类简介 1 引脚信息类( p i n i n f o ) 该类用来定义和维护控件的引脚信息,包括:控件在上( 控件输入) 、下( 控 制输出) 、左( 数据输入) 、右( 数据输出) 四个方向上的引脚数目以及引脚对应 端口的名称。类的声明如下: c l a s sp i n i n f o :p u b l i c c o b j e c t p u b l i c : d e c l a r e _ s e r i a l ( p i n i n f o ) 声明该类可以序列化$ p i n i n f o ( ) :a 构造函数$ r 电子科技大学硕士论文 十初始化引脚信息$ v o i ds e t p i n i n f o ( i n t t o p ,c s t r i n g a r r a y * t s t r t , i n tb o t t o m ,c s t r i n g a r r a y * t s t r b , i n t l e f t ,c s t r i n g a r r a y * t s t r l , i n t r i g h t ,c s t r i n g a r r a yt s t r r ) : i n tg e t t o p p i n n u m b e r ( ) :木获得上引脚个数 i n tg e t b o t t o m p i r l n u m b e r ( ) :$ 获得下引脚个数术 i n tg e t l e f t p i n n u m b e r ( ) :序获得左引脚个数$ i n tg e t r i g h t p i n n u m b e r 0 :木获得右引脚个数 c s t r i n gg e t r i g h t t e r i n a l t e x t ( i n tn u m ) :序获得第n u m 个右端口名称术 c s t r i n gg e t l e f t t e r m i n a l t e x t ( i n tn u i i i ) :术获得第n u m 个左端口名称十 i n ta d d p i n l e f t0 :十左引脚数加1 i n ta d d p i n r i g h t0 :序右引脚数加1 在左端口名称数组m _ c s l e f t a r r a y 末尾添加字符串w n d t e x t * i n ta d d t e r m l e f t ( c s t r i n gw n d t e x t ) : 胁在右端口名称数组mc s r i g h t a r r a y 末尾添加字符串w n d t e x t * i n ta d d t e r m r i g h t ( c s t r i n gw n d t e x t ) : v o i dd e l e t e r i 曲t p i n ( i n tn u m ) : 删除第i 个右引脚木 v o i dd e l e t e l e f t p i n ( i n tm u m ) : 删除第i 个左引脚 c s t r i n gg e t l e f t s t r i n g0 :$ 获得最长的左端口名称字符m * c s t r i n gg e t r i g h t s t r i n 9 0 :序获得最长的右端口名称字符串丰 p r o t e c t e d : v o i ds e r i a l i z e ( c a r c h i v e d r ) :木序列化函数 p r i v a t e : i n tml e f t :十左引脚个数 9 电子科技大学硕士论文 c s t r i n g a r r a ym _ o s l e f t a r r a y ;胁左端口名称字符串数组术 i n tm _ r i g h t :十右引脚个数车 c s t r i n g a r r a ym _ c s r i g h t a r r a y ;$ 右端口名称字符串数组十 i n tmt o p ; 木上引脚个数十 i n tm _ b o t t o m ;术下引脚个数十 2 菜单按钮、最小化按钮类( c m e n u m i n b u t t o n ) 该类派生于m f c 按钮类( c b u t t o n ) ,通过重新定义c b u t t o n 类的虚消息响应 函数d r a w i t e m 实现特殊的按钮外观。 3 标题栏类( c c a p t i o n ) 该类派生于m f c 静态框类( c s t a t i c ) ,通过重新定义c s t a t i c 类虚函数 o n p a i n t 0 实现标题栏颜色、文本的显示。c c a p t i o n 类提供了四个接口函数供基 类使用: c o l o r r e fs e t c a p t i o n c o l o r ( c o l o r r e fc o l o r r e f ) :$ 设置标题栏背景颜色冰 l o g f o n ts e t c a p t i o n f o n t ( l o g f o n tp l f ) :胁设置标题栏字体丰 术设置标题栏文本颜色十 c o l o r r e fs e t c a p ti o n f o n t c 0 1 0 r ( c o l o r r e ff o n t c o l o r ) : 序获得标题栏文本在当前设备环境下的尺寸 c s i z eg e t c a p t i o n t e x t e x t e n t0 : 4 引脚类( c p i n ) 该派生于c o b j e c t 类,用于设置控件的输入输出参数以及完成控件间的数 据传递。其接口函数d r a w p i n ( c d c + p d c ,c o l o r r e fc r h l ,c r e c tr 。c t ) 用于完成 自己的外观显示。引脚类的设计涉及至数据传递、控件输入输出参数设置和对控 件间连线的支持功能的设计,具体设计和实现将在本文第五章讲述。 5 端口类( c t e r m i n a l ) 该派生于c s t a t i c 类,用于显示引脚的名称。通过类的自画函数完成特定的 外观显示。端口类的设计涉及到控件引脚数据类型设置、引脚包含数据的分析、 控件输入输出参数的设置功能的设计,具体设计和实现将在本文第五章讲述。 1 0 电子科技大学硕士论文 3 3 控件基类界面设计 3 3 1 控件的两种表示方式 根据控件所实现的不同功能将控件分为两种表示方式,如图3 1 所示: 图3 一l 编程视控件:该类控件显示在平台的编程视图中,参与平台的运行。开 发人员在编程视中完成自动测试程序的编制、调试。 面板视控件:测试程序编制好后,将编程视中部分需要和用户交互信息 的控件通过工具栏的“添加到面板”按钮添加到面板视图中。面板视控 件只完成人机信息交互,并不参与平台的运行。自动测试系统的最终用 户通过面板视操作和执行自动测试程序。 3 3 2 初始化函数设计 在创建控件窗口之前,首先应当初始化控件的各种信息。类的构造函数完成 控件基本属性( 颜色、字体) 、标题栏默认高度、端口尺寸、控件当前状态等变量 的初始化。 控件基类构造函数一,用于初始化面板视控件 c b a s e ( c w n d w n d ) : 控件基类构造函数二,用于初始化编程视控件 c b a s e ( c s c r o l l v i e w 趣o v i e w ,b o o lv 2 f l a g = f a l s e ) : 参数w n d 为指向父窗口指针 v 2 f l a g 为面板标志,如果为t r u e ,则是面板控 件,否则为编程视控件:p v i e w 为指向父视的指针。 3 3 3 窗口创建函数设计 基类分别为编程视和面板视控件设计了窗口创建函数c r e a t e ,用于封装控 电子科技大学硕士论文 件窗口的刨建过程。派生类控件只需调用该函数并传递给适当的输入参数就可以 完成其窗口的创建工作。 i 创建函数定义 编程视控件窗口创建函数( 创建函数一) 定义如下: b o o lc r e a t e ( i n tt o p , 水控制输入引脚个数 c s t r i n g a r r a y * t s t r t ,丰控制输入端口名称数组 i n tb o t t o 吗 控制输出入引脚个数$ c s t r i n g a r r a y * t s t r b ,十控制输出端口名称数组木 i n tl e f t , a 数据输入引脚个数杉 c s t r i n g a r r a y * t s t r l , a 数据输入端口名称数组$ i n tr i g h t , 皋数据输出引脚个数$ c s t r i n g a r r a y * t s t r r 砷:数据输出端口名称数组车 ) : 面板视控件窗口创建函数( 创建函数二) 定义如下: b o o lc r e a t e ( c b a s e * p c o n t r 0 1 ) ; 参数:p c o n t r o l 表示对应编程视控件的指针。 2 创建函数设计和实现 编程视控件窗口创建函数( 创建函数一) 首先调用基类的成员函数 i n i t o c x p i n 初始化基类数据成员i _ p i n l n f o ( p i n i n f o 类对象) ,创建控件窗口时 根据i n _ p i n i n f o 对象提供的四个方向上的引脚个数和引脚名称数组创建控件的 引脚和端口。每次添加或删除引脚、改变端口的名称,均需要调用p i n i n f o 类的 接口函数对mp i n l n f o 对象的数据信息进行修改。这样在保存后或者在摧毁控件 窗口( 但该控件对象还存在) 后,才能通过基类数据成员皿- p i n l n f o 再次调用控件 窗口创建函数恢复控件的引脚和端口。完成控件引脚信息的初始化后,调用基类 私有成员函数o c x c r e a t e0 来完成控件基类窗口的创建。 面板视控件窗口创建函数( 创建函数二) 首先将输入参数p c o n t r o l 赋给成员 变量e t r p t r ,并将t h i s 指针赋给p c o n t r o l 对象的c t r p t r ,建立自己和编程视控 件的对应关系,然后调用o c x c r e a t e 0 完成控件窗口的创建。 基类私有成员函数o c x c r e a t e 0 真正完成控件的创建工作,其实现流程如图 3 2 所示: 电子科技大学硕士论文 图3 - 2 图3 2 说明: i s f i r s t c r e a t e 是基类私有成员变量,用于标识控件是否是第一次创建。 基类私有成员函数d r a w c a p ti o r l i e n u b o x m i n b o x0 完成控件标题栏、最小化 按钮和菜单按钮的创建( 面板视控件只创建标题栏和菜单按钮) 。 基类私有成员函数s n g _ c r e a t e p i n a n d t e r m i n a l ( ) 完成控件引脚和端口的 创建,该函数根据引脚信息对象( m p i n l n f o ) 保存的四个方向上的引脚个 数为控件在上、下、左、右四个方向创建引脚和端口,并建立二者的对应 关系。 电子科技大学硕士论文 基类虚函数o n c r e a t e c o n t r o l 0 用于派生类创建功能子窗口。 3 3 ,4 控件背景和边框 控件基类自画函数0 n p a i n t 0 完成控件背景和边框的绘制。该函数对应于窗 口类的w i v i _ p a i n t 消息。每一次窗口位置发生变化,框架自动调用该函数完成 控件的刷新。该函数将控件扣除标题栏、菜单按钮和最小化按钮后的区域分为三 个区域:左端口区,控件功能区,右端口区,根据控件基类成员mo b r h ( 控件背 景颜色) ,对三个区域分别采用w i n d o w sg d i 函数f i l l r e c t 完成背景颜色绘制。 并采用c d c 类接口函数d r a w 3 d r c c t 在“控件功能区”绘制一个三维的矩形框来 完成该区域的阴影效果。控件边框也通过采用d r a w 3 d r e c t 函数来完成其特殊的 显示风格。 3 4 控件重排功能 3 4 i 控件重排功能概述 在视图里( 编程视或面板视) 调用基类的c r e a t e 函数创建控件窗口时均指 定了控件的默认大小,派生类的0 n c r e a t e c o n t r o l 函数或其他函数在创建功能 子窗口时也指定了其默认大小和位置。但在实际的测试程序编制中,尤其在制 作虚拟仪器面板时,为了提供一个协调的外观显示,需要重新调整控件的大小。 调整控件大小的同时,控件自动完成窗口内各子窗口位置和大小的重新设置。 控件最大化状态时的重排机制如下: 最小化按钮位于控件的右上角( 前面板上没有最小化按钮) 、菜单按钮 位于控件的左上角。其宽度和高度均等于标题栏的高度。 标题栏位于控件顶部的菜单按钮和最小化按钮之间,标题栏高度不随 控件的高度发生改变,宽度随控件的宽度变化伸展或压缩,要求标题 栏的宽度覆盖完控件顶部最小化按钮、菜单按钮之间剩下的区域。( 前 面板控件没有最小化按钮,因此标题栏的右端应当邻接控件的右边 框) 。 编程视控件的控制输入、控制输出引脚位于控件上、下边框的中间, 数据输入和数据输出引脚则等间距的排列在控件左边框或右边框( 扣 除标题栏的高度) 。 派生类添加窗口自动调整其位置和大小。 3 4 2 控件重排功能的设计和实现 电子科技大学硕士论文 3 4 2 1 控件公共部分的重排 控件公共部分的重排包括菜单按钮、标题栏、最小化按钮、引脚和端口的 重排。c b a s e 作为控件基类,并不知道派生类控件的予窗口类型和数量。只能 通过窗口查找的方法,找到控件的每一个子窗口,然后根据子窗口的类型,设 置子窗口在控件窗口中的位置和大小。 1 控件标题栏、菜单按钮、最小化按钮的重排 控件标题栏、菜单按钮、最小化按钮位于控件的最上方。标题栏高度不随 控件的大小发生变化( 始终为成员变量m _ c a p w i d t h 的值) ;菜单按钮和最小化 按钮的高度和宽度均为标题栏高度( mc a p w i d t h ) :标题栏宽度则为控件的宽度 减去菜单按钮和最小化按钮的宽度( 面板控件标题栏的宽度为控件的宽度减去 菜单按钮的宽度) 。利用w i n d o w s a p i 函数f i n d w i n d o w e x 找到控件所有直接子 窗口,然后使用m f c 对象类( c o b j e c t ) 的i s k i n d o f 函数判断该子窗口是否是标 题栏、菜单按钮、最小化按钮,并按照前面所述的方法设置其位置和大小。 2 控件引脚和端口的重排 基类成员函数s n g _ r e d r a w p i n ( c d c * p d c ,c o l o r r e fc o l o r ) 完成引脚和端口 的重排。输入参数p d c 为当前设备环境的指针,c o l o r 为引脚的颜色。控件大 小的改变只引起控件引脚和端口位置的调整,不改变它们的大小。引脚和端口 在控件中相对位置算法如下: 1 ) 左引脚和左端口在控件中相对的位置: 左引脚左上角的x 坐标为:0 左引脚左上角的y 坐标为: ( 控件高度一标题栏高度) ( 控件总的左引脚个数+ 1 ) ( 引脚编号+ 1 ) 一 引脚高度2 + 标题栏高度 左端口左上角的x 坐标为:对应左引脚左上角的x 坐标+ 左引脚的宽度 左端口左上角的y 坐标为: 对应左引脚左上角的y 坐标一( 端口高度一左引脚高度) 2 2 ) 右引脚和右端口在控件中相对的位置: 右引脚左上角的x 坐标为:控件宽度一右引脚宽度 右引脚左上角的y 坐标为: ( 控件高度一标题栏高度) ( 控件总的右引脚个数+ 1 ) ( 引脚编号 + 1 ) 一右引脚高度2 + 标题栏高度 右端口左上角的x 坐标为:对应右引脚左上角的x 坐标一端口宽度 电子科技大学硕士论文 右端口左上角的y 坐标为: 对应右引脚左上角的y 坐标一( 端口高度一引脚高度) 2 3 ) 上引脚在控件中的相对位置: 上引脚左上角的x 坐标为:( 控件宽度一上引脚宽度) 2 上引脚左上角的y 坐标为:o 4 ) 下引脚在控件中的相对位置: 下引脚左上角的x 坐标为:( 控件宽度一下引脚宽度) 2 下引脚左上角的y 坐标为:控件的y 坐标一下引脚的高度 3 重排功能实现 控件公共部分的重排流程如图3 3 所示: 厂 图3 3 3 4 2 2 派生类添加窗口的重排 3 4 2 2 1 设计思路和算法介绍 1 设计思路 计算子窗口的新位置时,参考标准的选择至关重要。如果使用拖动前控件 的大小以及子窗口的位置和大小来作为新位置的计算标准,多次拖动必然会造 成很多的误差,甚至会出现当控件拖动到较小再拖大时,很多子窗口无法显示 1 6 电子科技大学硕士论文 出来的情况。控件最小化以及保存后,再重建功能子窗口时也无法恢复原来的 显示特性。这显然不是我们要求的参考值。我们必须寻找控件中的恒定值作为 参考值。通过菜单创建控件时,必须指定控件的默认位置和大小,而每个派生 类在其成员函数0 n c r e a t e c o n t o l0 或其他函数中创建功能子窗口时,也必须为 该子窗口设置默认大小和位置,这两个值对任何控件来说都是恒定的。为了便 于派生类添加窗口的重排功能分析和设计,我们将控件窗口进行分区,图3 4 是控件示意图。基类要求派生类在图中的“控件功能部分”创建功能子窗口。 在控件基类窗口中,“控件功能部分”本身并不是一个单独的窗口,只是基类 留给派生类创建功能子窗口的区域。 图3 4 我们确定采用控件第一次创建时“控件功能部分”的默认大小作为缩放比 例的参考值,采用派生类子窗口在“控件功能部分”的默认位置和大小作为其 计算新位置和大小的参考值。 控件基类按照如下原则排列派生类添加的子窗口: 子窗口中心位置根据“控件功能部分”的缩放比例调整。 子窗口的宽度根据“控件功能部分”的缩放比例调整。 如果控件的当前高度大于控件的默认高度,子窗口的高度保持不变。 如果控件的当前高度小于控件的默认高度,子窗口的高度根据“控件 功能部分”的缩放比例调整。 当控件窗口缩小到无法正常显示,控件的功能子窗口将被隐藏。 2 算法介绍 控件功能子窗口的新位置和大小计算步骤如下: 1 )计算“控件功能部分”的缩放比例: 电子科技大学硕士论文 x 轴缩放比例( r a t e x ) 为: ( 控件当前宽度一左端口宽度一右端口宽度) “控件功能部分”默认宽度 y 轴缩放比例( r a t e y ) 为: ( 控件当前高度一标题栏高度) “控件功能部分”默认高度 2 ) 计算予窗口中心位置的新坐标; 子窗口中心位置x 坐标( p o i n t n e w x ) 为: 子窗口中心位置的默认x 坐标( 相对于“控件功能部分”) r a t e x + 控件左端口宽度 子窗口中心位置y 坐标( d o i n t n e w y ) 为: 子窗口中心位置的默认y 坐标( 相对于“控件功能部分”) x r a t e y + 控件标题栏高度 3 )计算子窗口的新宽度和高度; 子窗口新宽度c x 为:子窗口默认宽度x r a t e x 子窗口新高度c y 为: 如果r a t e y 大于1 :c y = 子窗口默认高度 如果r a t e y 小于等于1 :c y = 子窗口默认高度x r a t e y 4 ) 计算子窗口左上角在控件中的新位置; 左上角x 坐标为:p o i n t n e w x c x 2 左上角y 坐标为:p o i n t n e w y c y 2 3 4 2 ,2 2 重排功能实现 1 “控件功能部分”默认大小的记录 控件基类成员变量i s f i r s t c r e a t e 用于标识控件是否是第一次创建,初始 值为t u r e 。在基类成员函数o c x c r e a t e 中,完成控件窗口的创建后,如果 i s f i r s t c r e a t e 的值为t r u e ,则记录下控件的初始大小值,并将该值扣除控件 标题栏默认高度( 1 8 ) 和控件左、右端口的默认宽度,得到的值就是我们假想的 “控件功能部分”的默认大小,将该值保存在基类成员变量m _ o l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论