VC6.0编辑控件的改进设计
2012-06-14李源泉
李源泉,朱 龙
(1.西安电子科技大学,陕西西安710071;2.中国电子科技集团第五十四研究所,河北石家庄050081;3.第二炮兵驻石家庄地区军事代表室,河北石家庄050081)
0 引言
目前国内S频段统一测控系统软件大多采用VC6.0编译环境,编辑控件等技术手段在监控软件中被大量使用。VC6.0编译环境下的普通编辑控件由于不具备输入信息的判断功能,需要人工编码设计实现。在不同的工程实施中,不仅增加软件编码工作量,实现方式无法统一,而且往往无法全面满足设计要求。
通过对VC6.0编译环境下的普通编辑控件进行改进,使用类封装的形式,数据处理的消息响应处理机制,形成一种改进的编辑控件。与普通控件相比,改进后的编辑控件在不破坏已有功能的情况下,不仅增加了输入信息的自动判断、异常处理功能,而且具备代码、实现方式统一的优点。因此改进后的编辑控件可以为上述问题的解决提供一种有效技术手段。
1 总体设计
1.1 编辑控件封装设计
编辑控件需要满足外部调用灵活和功能管理相对集中的要求,因此在VC6.0编译环境下,采用面向对象的设计方法,采用类封装形式,是实现编辑控件全部功能的基本要求。
编辑控件不能破坏原有编辑控件的功能设计,因此在VC6.0编译环境下,改进编辑控件应充分继承原有编辑控件类的特点与功能。
1.2 编辑控件功能设计
编辑控件的实现需要提供数据属性指定(包括数据范围和数据步进等信息)功能、非法信息判断功能和异常处理功能,因此将设计分为:初始化设计;实时判断设计和异常处理设计3个部分。
初始化设计需要考虑的要求主要是数据属性指定灵活、扩展方便,为非法信息判断功能提高基本信息。
实时判断设计的要点在于实现技术可靠,功能模块划分清晰,逻辑处理清晰,软件编码易于实现。
异常处理设计的要求是能够满足S频段统一测控系统的基本特点,寻求合适的统一处理机制,尽量满足已有工程设计需求的同时,具备一定的可扩展性。
1.3 编辑控件类型设计
目前国内S频段统一测控系统监控软件所使用的编辑控件类型包括:整数型、浮点型和16进制型3种。因此需要将编辑控件按照以上类型划分,分别进行设计开发。
整数型编辑控件的主要特点是需要指定数据可输入最小值、可输入最大值以及可输入步进。例如年份信息,要求最小输入2000年;最大输入2030年;步进为4,表示从2000年开始,每间隔4年为一合法信息。
浮点型编辑控件的主要特点与整数型基本一致,需要增加可输入精度属性。例如在S频段统一测控系统中常见的频率参数,其输入范围为2 025~2 200 MHz,步进要求为 100 Hz、1 kHz两档,输入精度也要求100 Hz、1 kHz两档。
16进制型编辑控件目前的主要特点是需要指定数据输入最大值。例如单字节编辑控件,按照16进制数据输入,其最大值不超过0x1F。
2 需要解决的问题
2.1 编辑控件的初始化
普通编辑控件由于无法指定输入信息范围、步进和精度等属性,是导致其无法提供非法信息自动判断的根本原因;在VC6.0编译环境下寻求一种合适的初始化处理机制,能够完成上述属性的指定,是解决问题的前提条件。
因此该机制必须具备实现技术可靠、较强扩展性的特点,从而实现3种类型编辑控件的统一设计;并且能够根据不同的工程研制实际需求,达到易于扩展、维护简单和编码工作量小的总体要求。
2.2 编辑控件的实时判断
普通编辑控件由于不提供输入信息的实时判断机制,是其不具备非法信息自动判断的重要原因。在VC6.0编译环境下寻求一种合适的实时判断机制,实现信息的动态获取、实时判断,是解决问题的基本条件。
因此该机制在解决实时判断问题的同时,能够提供一种相对通用的程序判决逻辑清晰,达到信息实时判断的总体要求。
2.3 编辑控件的异常处理
普通编辑控件由于不提供异常信息的处理机制,也是考虑改进的重要原因;结合S频段统一测控系统监控软件自身特点,在VC6.0编译环境下寻求一种易于实现的异常信息处理方式,确保异常信息的统一处理,是衡量改进编辑控件好坏的重要指标。
该方式在解决非法信息异常处理的同时,还应该综合考虑目前S频段统一测控系统的特点,满足异常处理方式统一的总体要求。
3 关键技术
3.1 构造函数重载技术
为解决编辑控件初始化问题,基于C++语言的构造函数重载技术是一种可选方案。使用构造函数的重载技术,不仅能够可靠解决编辑控件输入范围、输入步进的初始化处理问题,而且针对3种不同类型编辑控件,具有较强的扩展性。
以下为整数型编辑控件构造函数及其主要代码。针对不同控件类型,例如浮点型,如果需要扩展增加输入精度属性,可通过增加构造函数输入变量顺利实现。
∥构造函数重载
∥Min最小值Max最大值Step步进
CLyqEditEx(int Min,int Max,int Step);
CLyqEditEx m_strYear;∥申明年信息编辑控件
m_strYear(2000,2030,4);
浮点型以及16进制型编辑控件仅提供构造函数,由于其他技术与功能实现与整数型基本一致,不再重复描述。
∥浮点型编辑控件构造函数重置
∥Min可输入最小值Max可输入最大值Step输入值步进Precision输入值精度
CLyqEditEx_Double(double Min,double Max,double Step,double Precision);
∥16进制型编辑控件构造函数重置
∥Max可输入最大值
CDzEditEx(DWORD Max).
3.2 消息响应技术
为解决编辑控件的实时判断问题,采用VC6.0编译环境的消息响应技术是一种可行方案。使用输入过程中产生的消息响应机制,可以动态实时地进行信息的获取和判断处理。
该方案的特点是通过输入信息产生的消息驱动实时判断,因此能够充分满足编辑控件实时判断要求。
以下为消息响应技术的主要生成代码。
∥消息的生成ON_CONTROL_REFLECT(EN_UPDATE,OnUpdate)
∥消息的处理
void CLyqEditEx::OnUpdate()
{
if(!JudgeParaNum(TRUE))∥输入信息判断
{
ResetPara(FALSE);∥异常处理
}
}
3.3 程序判决逻辑
通过消息响应技术只能解决输入信息的实时响应问题,并不能解决输入信息的判断问题。
在输入消息到达后,需要针对输入信息提供统一的判断处理,完成输入信息非法判断;同时为保证统一设计以及维护方便,需要针对3种不同类型编辑控件提供统一的判决逻辑。
如上所述,函数JudgeParaNum完成输入信息的非法判断处理,必须包括以下几个部分的处理逻辑:最新输入信息的获取处理;非法字符的基本判断处理;长度超限的判断处理;长度是否到达最小值的判断;输入信息范围的判断处理;输入步进的判断处理和合法信息的记忆处理。需要说明的是,对于浮点型编辑控件还需要增加输入精度的判断处理。
最新输入信息的获取处理主要完成输入信息的实时获取操作。非法字符的基本判断处理主要完成非法字符输入的判断,例如输入信息包括了非阿拉伯数字的信息,应立即识别为非法输入。长度超限的判断处理主要完成数据输入长度的判断,结合数据输入范围、数据步进和精度等信息,应自动识别出可输入信息的最小长度以及最大长度,在输入信息超过最大输入长度后,应立即识别为非法输入。长度是否到达最小值的判断处理主要根据最新输入信息是否达到最小输入长度,区别是否需要启动判决逻辑,防止因未输入完毕导致误判输入信息非法。
输入信息范围的判断处理主要根据构造函数提供的输入最小值以及最大值,判断输入信息是否超限。输入步进的判断处理主要根据构造函数提供的输入步进,判断输入信息的步进信息是否超限。对于浮点型编辑控件,输入精度的判断处理主要根据构造函数提供的输入精度,判断输入信息精度是否超限。据此形成的判决逻辑流程图,将直接影响到编辑控件实时判断功能的顺利实现。以整数型编辑控件为例,判决逻辑流程图如图1所示。
图1 判决逻辑流程
图1中的判断过程必须是顺序处理的,其中第3步骤判断长度是否达到最小值的过程处理逻辑是:如果信息长度未达到最小值,则直接结束判断;如果信息长度已经达到最小值要求,则继续后续判断处理操作。
从图1中的流程内容看,每一个执行步骤所完成的功能相对独立,因此在实现过程中,每一个执行步骤都可以封装成独立的函数,便于代码的调试以及维护。
从图1中的流程执行关系看,各个流程步骤之间的调用逻辑基本是线性的,互相之间的关系主要通过调度次序来体现,因此,整个判决逻辑比较清晰,简单,在VC6.0编译环境下编码人员容易实现。
对于浮点型编辑控件,需要在图1中的判断步骤最后增加精度判断逻辑;对于16进制类型编辑控件,需要在图1中的判断步骤中删除步进判断。
4 系统仿真
4.1 仿真环境
验证编辑控件的软件环境可以采用Wondows系列操作系统,开发平台选用VC6.0编译环境,使用到的工具软件包括Office 2003以及代码统计工具。
硬件设备采用目前市场上主流台式机配置即可,基本硬件配置主要要求如下:
Dell台式机的CPU为2.79 MHz,内存1 GB以上,主板为INTEL 945芯片组。
此外,为了保证编辑控件能够正常使用,完成了仿真测试软件的开发工作。在该仿真测试软件中,可以分别使用改进的编辑控件和普通编辑控件,配合完成相关性能测试工作。
4.2 仿真方法
为了得到最详细的原始素材,采用程序检查法完成系统性能指标的测试和验证。即在仿真测试软件的关键点设置程序测试节点,记录测试数据信息,尽可能地获取接近实际情况的测试数据。
编辑控件系统性能中的处理时间为关键指标。因此,需要在仿真测试软件中采集调用开始以及结束时间,获取调用处理所花费的时间,然后采取多组测试,使用求数学平均值方法完成原始数据的记录和整理工作。
编辑控件的外部调用次数也是重要指标,因此,需要针对仿真测试软件的外部调用次数进行统计。该工作比较简单,采用常规的代码统计分析工具,针对特定代码进行处理即可实现。
考虑到S频段统一测控系统监控软件的自身特点,在一个相对独立的调用编辑控件界面中,其处理数量一般都在10个以上,因此在仿真测试软件设计中,编辑控件的使用数量不能过低,系统仿真过程中分别采用了10个、20个、50个一共3档进行测试。
5 仿真结果分析
在Dell台式机进行的系统仿真测试,主要集中在20次、50次两档上。其中20次一档一共仿真10组,50次一档一共仿真5组。以20次一档为例,其仿真结果如表1所示。
表1 普通控件与改进控件性能比对
从表1中可以看出,在程序人工编码方面,普通控件由于需要完成额外的非法判断处理,与改进控件有很大差距,同时还未实现异常处理功能;在系统执行效率性能以及外部调用次数方面,普通控件与改进控件略有差别,改进控件在执行时间上有增加现象,但随着计算机性能的不断提高,该执行效率的轻微下降是可以接受的。
根据以上分析,由于普通控件与改进控件在执行效率和外部调用性能方面没有本质上的差别,但是在编码行数方面,改进后的控件比普通控件有明显改善,如果再考虑到改进控件所新具备的自动判断和异常处理功能,建议在VC6.0编译环境下的编辑控件采用该设计。
6 结束语
在VC6.0编译环境下进行的编辑控件改进设计,特别适合在S频段统一测控系统监控软件中使用,根据该系统的特点增加了输入信息合法性的实时判断、异常处理功能。与普通控件相比,不仅在执行效率等方面没有明显的降低,而且该控件也具备便捷的代码调试能力和高度的可靠性,已在多个S频段统一测控系统软件中使用,运行非常可靠。
[1]孙 皓.Visual C++范例大全[M].北京:机械工业出版社,2009.
[2]钱 能.C++程序设计教程[M].北京:清华大学出版社,2001.
[3]LIPPMAN S B.Essential C++[M](中文版).侯 捷,译.武汉:华中科技大学出版社,2009.
[4]DEITEL H M,DEITEL P J.C++大学教程[M].北京:电子工业出版社,2009.
[5]LIPPMAN S B,LAJOIE J.C++Primer[M](中文版).北京:中国电力出版社,2001.
[6]KRUGLINSKI D J.Visual C++技术内幕[M].北京:清华大学出版社,1997.
[7]杨正甫.面向对象分析与设计[M].北京:中国铁道出版社,1997.