VC开发环境

2024-11-05

VC开发环境(精选7篇)

VC开发环境 篇1

1 概述

地理信息系统的应用日益广泛,其开发方法也是多种多样。在不同应用领域、不同使用环境下,其使用要求和开发方法均有其自身的特色。在军事作战指挥领域,通常使用由各国军方自己定义的一套电子地图数据库和一套专用的开发系统,因而使用和开发均受到很大的局限性。在一些对外协作项目开发中,不可能使用军方提供的电子地理信息系统。为此,在通用平台及环境下利用较为通用的GIS开发工具以实现作战、训练目的的应用研究就显得非常必要了。本文针对在VC++环境下利用Map X开发工具完成“军用电子地理信息系统”开发的方法进行探讨和研究。

2 Map X研究

2.1 关于Map X

Map X是Map Info公司向用户提供的具有强大地图分析功能的Active X控件产品。由于它是一种基于Windows操作系统的标准控件,因而能支持绝大多数可视化开发环境如Visual C++、Visual Basic、Delphi、Power Builder等。在开发过程中可以选用自己最熟悉的开发语言,易于将地图功能嵌入到应用中,并且可以脱离Map Info的软件平台运行。利用Map X能够简单快速地在应用中嵌入地图功能。Map X采用基于Map Info Professional的相同的地图化技术,可以实现Map Info Professional具有的绝大部分地图编辑和空间分析功能。而且Map X提供了各种工具、属性和方法,从而可以方便的完成要实现的功能。

2.2 Map X的基本属性

2.2.1 Map

Map对象主要包括Datasets、Layers、Annotations、Geosets等对象集合。Map对象有一些主要的属性,如Zoom用来设置放大级别(在地图上显示的大小),Rotation控制地图的旋转角度,Center X和Center Y用于设置x和y的坐标系,这要取决于地图的投影。Map对象的许多属性本身又是一个对象,比如说一幅地图由多个图层组成,则在一个Map对象中存在一个单独的layers集合,其中包含所有图层的信息。

2.2.2 Layers

在Map X中,每张单独的地图都被表示成单独的一个图层,所有的图层存储在layers集合中。Layers集合由Layer对象组成,按顺序编号为0到n。Layer对象由Features对象组成,Features对象又是由Feature对象组成,对应于地图中的点、线、区域或符号。

2.2.3 Geo Sets

Geo Set是在Geo Manager中建立好的*.GST文件,类似Map Info中的Work Space概念,是图层及其设置的集合,控制程序中显示的地图;也可以在运行阶段设置Geo Set,此时将导致已经加载的所有图层和Data Set被删除而由Geo Set中定义的图层所代替。如果单纯地想删除所有图层,只需给Geo Set赋一个空字符串即可。

2.2.4 Datasets

Datasets用于实现地图与数据的绑定。举例说明,有各种装备的定位信息的数据库和一张该城市的地图,则可以将二者绑定,在地图上形象地显示出各装备的定位信息。

2.2.5 Annotations

Annotations集合提供了操纵地图中文字和符号的简单方法。Annotations位于其它图层的上方并且不与任何数据连接,类似于Map Info中的透明图层。

3 实现方法

3.1 地图导入

Map X有两种打开地图的方法,一种是单独打开各个图层,另一种是打开各图层的组合文件.GST文件。.Gst文件是由geose manager工具制作的把各矢量图层组合在一起的地图文件格式。默认情况下.GST文件存储在…mapxmaps目录下,可以调用GeoDictionary Manager程序进行修改,指向用户程序数据所在的位置。

3.2 地图导出

导入的地图经过图层控制等变化后,可以利用地图导出功能将变化后的地图导出。代码如下:

m_map.Save Map As Geoset("my",fd.Get Path Name());

3.3 图层控制

Map X中调用的是一个由多个独立地图图层组成的地图集合。它包括铁路、首都与省会、市县界、河流等图层。用户的数据反映在地图上通常根据点、线、面的层次结构进行归类。每一个独立的图层都可以作为一个独立的地图,通过选择不同的图层,来实现地图的不同表现层次。最上面一层为Layers(1),Layers(2)位于Layers(1)的下面,以次类推。最下面的图层最先绘制,最上面的图层最后绘制。在应用程序中,合理地安排好每层在Layers中的顺序是至关重要的。比如说有两个图层,一层为点,一层为区域,则应将点层放到区域层的上方,否则区域会将点覆盖。Map X的图层控制功能代码如下:m_map.Get Layers().Layers Dlg();

3.4 距离量算

在Map X中有计算两点间距离的公式但没有现成的距离量算工具,本文通过自己画出路径,并保存点迹从而实现了此功能。为此需要响应鼠标按下、移动、弹起等消息,但不幸的是由于Map X把主窗口已经占用了,不能直接响应鼠标消息,经过分析,本软件采用了在Pre Translate Message(MSG*p Msg)函数中拦截鼠标消息的方法,从而实现了所需的功能。

3.5 地图放大、缩小、漫游等显示控制

情报软件要求以各种比例尺查看图形,如以小比例尺查看全局,以中比例尺查看局部,以大比例尺查看细部.所以,必须提供诸如放大、缩小,以及漫游等功能。采用Map X通用工具,可非常方便地实现上述功能,在Map X中常有的系统定义工具有:标注、漫游、各种选择、放大与缩小等。功能代码如下:

3.6 阵地布局、航迹、火力范围等显示控制

阵地位置、航迹显示、火力范围等使用的Map X功能是基本相同的,都需要初始化一个对象,并对对象进行更新。但由于航迹显示需要历史轨迹,而在Map X中显示对象太多会很费时,因而显示历史轨迹时直接使用API函数。对火力范围的处理也和历史航迹的处理相似,下面以航迹显示为例来说明显示控制方法。主要代码如下:

3.6.1 对象的创建与初始化

//航迹对象初始化,本函数用来创建航显图层和对航迹对象进行初始化。

3.6.2 点迹显示更新

3.6.3 更新历史航迹

4 结束语

本文采用程序设计语言VC++,集成Map X控件,实现了电子地图的各项功能,在为部队开发的某软件中已获得了成功的应用基本满足了用户的需求,获得了用户的好评。

参考文献

[1]颜辉武.VC++环境下基于MapX控件的GIS应用软件的开发[J].昆明理工大学学报:理工版,2001(6).

[2]Mapinfo公司.MapX Online Help[Z].2000.

VC开发环境 篇2

关键词:计算机图形学,算法,模板,交互式,可视化

计算机图形学Computer Graphics简称“CG”,它是计算机技术与电视技术、图形图像处理技术相互融合的结果,使用主流的可视化编程平台VC++2005所开发的图形,与使用Turbo C语言开发的图形相比,不仅可以显示真彩色,而且可以实现交互式绘图,它又突破了传统计算机图形学的教学模式(理论文本加静态图片)的枯燥性、抽像性的限制。基于此,提出了一种模板把CG中各种图形生成的算法以可视化的方法、动态交互式展现出来,实践证明,通过此模板,学生能容易理解图形生成的算法原理过程,激发了学习CG的兴趣,从而极大地提高教学质量。

1 VC++绘制图形常见方法

1.1 使用On Draw成员函数

该方法只需要在源程序Test View.cpp的On Draw成员函数中直接书写绘图语句。操作简单,但无法控制函数的调用,它常用于对屏幕已有图形进行旋转、消隐、光照和纹理映射等操作。

1.2 使用CDC*p DC的菜单调用方式

在MFC框架中的“视图(View)”菜单中,打开“解决方案资源管理器(Solution Explorer)”子菜单,双击Test View.cpp,在该文件最后添加成员函数Drawmy Line()的定义:

在“解决方案资源管理器(Solution Explorer)”中,双击“Test.h”,在该文件中“public:”下面添加成员函数声明:void Drawmy Line();

在菜单中添加菜单函数On MENU Drawmy Line()调用Drawmy Line()成员函数。

该方法需要在头文件Test View.h中声明成员函数Drawmy Line(),在源程序Test View.cpp中定义成员函数Drawmy Line()。在Drawmy Line()函数中使用了CDC类指针对象,需要调用和释放设备上下文。

1.3 使用CClient DC dc(this)的菜单调用方式

成员函数Drawmy Line()的声明和菜单的调用同第二种方法的[2]和[3],在Test View.cpp文件中修改Drawmy Line()成员函数的定义:

该方法也需要在头文件Test View.h中声明成员函数Drawmy Line(),在源程序Test View.cpp中定义成员函数Drawmy Line()。不同点只是使用显示器客户区设备上下文类定义了客户区对象dc,并使用客户区的this指针对dc对象进行初始化,使dc对象指向显示器的客户区,这种方法不需要调用和释放设备上下文。与前述两个方法相比,第三种方法更易理解,实现更简单。

2 基于VC++2005环境开发的一个金刚石图案应用案例

2.1 案例需求

2.1.1 案例描述

将半径为r的圆周n等份,然后用直线将各等分点隔点相连,形成的图形称为“金刚石”图案。

2.1.2 功能说明

1)单击绘图菜单或工具栏图标,弹出对话框(如图3)读入圆的等分点个数和圆的半径,以屏幕客户区中心为圆心绘制金刚石图案。

2)程序运行界面如图4。

2.2 案例分析

该案例设计一个P2D类,用于存放各个点的double型(x,y),最大分点不会超过50个,用P2D类定义了大小为50的P2D类对象数组p[50]。关键在于内层循环设计时不要进行进行重复直线连接,以等分点n=5为例,连接情况如图5和表1所示。

为此,设计一个二重循环,代表队起点的外层循环从i=0循环到i=n-2,代表终点的内层循环从j=i+1循环到i=n-1。以p[i].x,p[i].y作为起点,以p[j].x,p[j].y作为终点绘制连线。

3 详细设计[4]

3.1 点类设计

该实例以Test为项目名称,主要设计了P2D类,并通过视图菜单中的类视图子菜单选中Test项目右键添加一个名为P2D的C++类,并且为了保证运算精度,在P2D中添加double成员变量x,y;

3.2 对话框类设计

在资源视图中右键选择Dialog中的插入Dialog,在对话框内添加静态文本和编辑框控件Edit Control修改属性,设计后的对话框如图6,分别右击对话框中两个编辑框,依次添加类型为double的成员变量m_n(表示等分点个数)、m_r(代表圆的半径)。

3.3 CTest View类视图设计

在类视图中右键选择CTest View,并添加成员变量和成员函数,Test View.h声明如下:

3.4 菜单设计

3.4.1 设置菜单ID

在资源视图中双击Menu中的IDR_MAINFRAME,添加“绘图”菜单及其二级菜单“金刚石图案开始制作”,并通过属性设置其ID为ID_Diamond。

3.4.2 设置菜单函数

在类视图中右键选取CTest View的属性,在事件中为ID_Diamon添加On Diamon事件,并添加如下代码控制绘图操作:

3.4.5 工具图标设置

在资源视图中选取Toolbar下的IDR_MAINFRAME并添加相应的图标,然后选中添加后的图标,在其属性中把其ID改为ID_Diamond(该例以绘图操作为例),以实现图标和子菜单的关联,同样的方法设置其他图标与菜单的关联。至此一个完整的计算机图形算法的模板生成了。

4 结束语

CG算法开发模板紧跟主流开发环境,实现可视化的设计,人性化的界面,通过简单和修改,也适合于Bezier曲线算法、B样条曲线等其他图形,实践证明,通过此模板,学生能容易理解图形生成的算法原理过程,激发了学习CG的兴趣,从而极大地提高教学质量。因此这对计算机图形学的研究和教学意义重大。

参考文献

[1]孙家广,胡事民.计算机图形学基础教程[M].北京:清华大学出版社,2008.

[2]郑海鹰,李爱光,张新慧,等.计算机图形学与数字地图制图[M].郑州:解放军信息工程大学测绘学院,2004.

[3]霍顿,Visual C++2005入门经典[M].李颂华,康会光,译.北京:清华大学出版社,2007.

VC开发环境 篇3

本文以Cadence软件的SigXplorer为例,在SigXplorer界面的菜单栏中嵌入自己的菜单项,调出VC界面,通过VC界面浏览要仿真的拓扑文件,点击确定后,SigXplorer会自动导入浏览的拓扑文件并仿真。通过这一简单的例子,介绍了基于VC的Cadence二次开发的步骤。

1 SKILL语言简介

Cadence公司开发的SKILL语言,是基于人工智能语言Lisp发展而来,语法似于C语言。SKILL是一种解释性语言,使用该语言开发的程序必须提交给SKILL解释器才能运行。用户可通过窗口、菜单、组合键和Cadence的命令输入窗口等完成提交工作,如图1所示[1]。

从图1可以看出,在Cadence中调用任何一个菜单命令、或者在命令输入窗中输入任何一个命令都会激活一段SKILL的程序来完成所要求的功能。SKILL语言允许用户根据需要快速和轻松地定制和扩展现有的软件环境;它提供一个安全、高级的编程环境,可以自动处理传统的系统编程操作,例如内存管理等;SKILL编写的程序无须编译即可立即在Cadence环境运行。

2 SigXplorer二次开发步骤

2.1 创建VC界面

启动VisualC++6.0,使用MFC AppWizzard(exe)按照默认选项创建一个基于对话框的工程,工程名命名为VC UI。将默认的控件删除,添加两个按钮控件,其中一个控件的名称改为“浏览”,另一个改为“自动仿真”。编译,并将生成的可执行文件VC UI.exe复制到一个路径下,如E:下。路径可任意,但是其中不能包含汉字。

此时的用户界面只是一个框架,并没有添加实际的代码,所以仅能被调用弹出,但不能完成任何功能。

2.2 启动SKILL命令行解释器界面

在SigXplorer界面最下面的Command命令行中直接输入settelskill,就会弹出一个新的界面,如图2所示。

这个界面就是用来运行SKILL函数和命令的解释器。当然,也可以直接在命令行中输入SKILL函数或命令,但这时输入的函数和命令必须都要在前面加上字符串“skill”,才可以正常执行。退出命令行解释器可以直接输入“exit”。

2.3 编写SKILL函数,调出VC界面

在某一个路径下,新建一个文本文档,将后缀的.txt改成.il。例如在C盘下,名字为Call VC.il。路径可任意,但是不能包含汉字。用记事本打开文件,输入如下内容

Procedure函数用来定义一个有参数的函数[2],本例中函数名为Call VC,参数列表在函数名之后的括号内,但是本例中没有使用参数。Procedure函数的返回值是定义的函数名,在本例中就是Call VCIpcBeginProcess函数[3]的作用是调出一个子进程。括号内的参数,第1个参数表示子进程的全路径。这个全路径也不能有汉字。第2个参数只在网络模式中才有用,本例中子进程在本机运行,所以该参数不用设置。第3个参数是一个回调函数,当父进程(即SigXplorer)从子进程(即VC进程)接收数据时,该回调函数被调用。所以可以编辑回调函数,使VC进程传输给SigXplorer的命令在回调函数中被执行。但此时VC代码并没有完成任何功能,所以暂时不编辑回调函数,那么第3个参数也暂时不用设置。

Call VC.il文件编辑完成,在命令行解释器中输入load(“c:/Call VC.il”)。注意SKILL全路径中的分隔符不是“”,而是“/”或是“”,也就是说输入load(“c:Call VC.il”)结果也是一样。如果返回t,说明导入成功,此时相当于定义了一个函数Call VC(),在命令行解释器中输入Call VC,就会调用该函数,结果是调出了VC进程VC UI.exe,弹出相应的界面。

2.4 将SKILL函数注册为Cadence命令

SKILL编写的函数虽然能在命令行解释器中直接输入,但是如上所述,如果要在命令行中输入该函数,需要在前面加上字符创串“skill”,否则就会报错。例如上面编写的Call_VC()函数,如果在命令行中输入Call_VC,就会出现错误提示“E-Command notfound:Call_VC”。

注册成Cadence命令的另一个原因,是因为只有在命令行中可以直接输入执行的命令,才能作为菜单项的执行命令,也是为下面创建自己的菜单项作准备。

将SKILL函数注册为Cadence的命令用的是axlCmdRegister(“ShowVC”'Call_VC?cmdType“interactive”)。这个命令是将SKILL函数Call VC注册为相应的ShowVC。这样在Cadence中运行ShowVC就相当于是运行了Call_VC。参数cmdType用来说明注册命令的类型“interactive”,“general”,“sub_cmd”。通常都会选择“interactive”。

在命令行解释器中输入axlCmdRegister(“ShowVC”'Call_VCcmdType“interactive”)。然后在命令行中输入ShowVC,就能调出VC界面。

2.5 在SigXplorer菜单栏上创建自己的菜单项

SKILL的函数axlUIMenuDump(t_MenuFile)的作用是把当前窗口的菜单下载到一个指定文件里,t_MenuFile就是指定文件的全路径,菜单文件的后缀名为.men,但是在指定全路径时,也可以不用加后缀。axlUIMenuLoad(t_MenuFile)是用t_MenuFile所指向的菜单文件替换当前菜单。

利用以上两个函数可以实现菜单栏的编辑。

在命令行解释器中输入axlUIMenuDump(“e:/SigXPMenu.men”),将当前菜单下载到E盘,菜单名为SigXPMenu。用记事本方式打开该菜单文件,可以看到关键词Popup之后是弹出式菜单的菜单名,如Popup“&File”;关键词Menuitem之后是子菜单项的菜单名,如Menuitem“&New….”,“new”,New是菜单项显示的名字,逗号后面是执行的命令,只要是在命令行可以输入运行的命令都可以在这里设置。在最后一个END之前,输入

以上代码的作用是新建一个名称为NewPOPUP的弹出式菜单,这个菜单下只有一个子菜单,名称为InvokeVC,功能是调出VC界面。

在命令行解释器中输入axlUIMenuLoad(“e:/SigXPMenu.men”),用编辑过的菜单替换当前菜单,结果如图3所示。

点击InvokeVC子菜单项,就会弹出VC界面。

2.6 编写SKILL回调函数dataH和VC函数,实现VC与Cadence的通信

SKILL回调函数定义如下

将以上代码添在Call_VC.il文件的后面,并将ipcBeginProcess语句改为cid=ipcBeginProcess(“e:/VC UI.exe”“”“dataH”),然后重新导入该文件。

VC用于和Cadence通信的函数为

函数的参数SkillStr是要执行的SKILL命令,用Printf语句将命令传给SKILL,但是此时命令字符串是在输出缓存中的,所以用fflush(stdout)清空输出通道,此时SKILL接收到子进程传来的命令,就会调用回调函数dataH,evalstring执行命令。将该函数作为CVC_UIDlg的成员函数。

2.7 编写VC控件的响应函数

本例完成的功能是,点击“浏览”,查找要导入的拓扑文件,点击“自动仿真”,该拓扑文件就会自动导入并仿真。所以控件“浏览”的响应函数为

AfxGetMainWnd());//新建对话框类浏览拓扑文件

上述代码中SkillOrder1~4都是要SigXplorer执行的SKILL命令,在VC代码中将它们变成字符串,再通过RunSkill函数将字符串传给SigXplorer。axlShell函数是把只能在命令行中执行的命令放到命令框中执行,所以可以用这个函数执行菜单项对应的命令。注意VC中路径的分隔符是””,而SKILL中路径的分隔符是”/”,所以要用Replace(“”,“/”)替换掉VC路径中的分隔符””。

编译,并将生成的可执行文件VC UI.exe复制到一个原路径E:下。

2.8 在SigXplorer启动时加载SKILL文件和语句

完成到这一步,已经可以通过点击新菜单项“InvokeVC”来导入和仿真拓扑了,但是SKILL函数的编写、新菜单的加载等工作都是通过手动在命令行解释器中输入的,或导入文件,或直接输入命令。所以要实现SKILL语句的自动加载,这样当SigXplorer启动时,所有SKILL语句就已经导入了。

具体方法是修改Cadence的init文件。Cadence安装的过程中,会让用户选择一个Home文件夹,这个文件夹存储的是Cadence的一些初始化信息,并且当Cadence启动时,初始的工作目录就是用户选择的Home文件夹。

如果用户不知道Home文件夹位置,可以在命令行解释器中输入getSkillPath(),得到的几个路径中,第一个就是Home文件夹的路径。

在Home文件夹中的Pcbenv文件夹下,有一个allegro.ilinit文件,它是Cadence的初始化文件,每当打开Cadence,就会从这个文件启动,所以可以通过这一文件实现SKILL语句的自动加载。如果用户这一文件夹下没有这个文件,可以新建一个,名称为allegro.ilinit。

综上所述,SKILL语句共完成了:定义一个函数Call_VC,并将其注册为Cadence命令;装载新的菜单;定义一个回调函数dataH。将相应语句都放到Call_VC.il文件中,并在allegro.ilinit文件中增加语句:load(“C:/Call VC.il”)。

这时再重新打开SigXplorer,会看到新增加的菜单项,点击菜单项,会弹出VC界面,用“浏览”控件查找想要导入的拓扑文件,点击“自动仿真”,会看到拓扑文件自动导入SigXplorer,并完成仿真。

3 结束语

通过一个实例,说明基于VC的Cadence二次开发的过程。通过二次开发,用户可以利用VC编写出复杂的操作界面,使得用SKILL开发的新功能具有较好的操作性,并能代替人力,实现许多复杂的功能,比如自动批量仿真等,提高了设计的效率,节省了时间。

摘要:Cadence的二次开发,可以实现新功能的定制,增强可操作性,并可代替开发人员完成许多重复性强的工作,节省了人力和时间。文中研究了用VC对Cadence做二次开发,使用VC编写操作界面,通过VC与SK ILL语言通信,实现了VC界面对Cadence软件的控制,完成特定操作,给出了实现的代码。

关键词:二次开发,Visual C++,SKILL,Cadence

参考文献

[1]白宇佳.信号完整性分析及基于Cadence EDA的仿真自动化技术研究[D].西安:西安电子科技大学,2006.

[2]Cadence Design Systems.SKILL Language Reference[Z].Canada:Cadence Design Systems,2009.

VC开发环境 篇4

TTS是text-to-speech的缩写即文语转换, 英文也称Speech Synthesis即语音合成。语音合成就是一个将文本转化为语音输出的过程, 这个过程的主要工作是将输入的文本按字或词分解为音素, 并对文本中的数字、货币单位、单词变形以及标点等需要特殊处理的符号进行分析, 将音素生成数字音频, 然后用扬声器播放出来或者保存为声音文件用音频播放器播放。Microsof Speech SDK提供一套关于语音处理的应用程序编程接口SAPI (Speech Application Programming Interface) , SAPI提供了开发文语转换 (Text-to-Speech) 程序和语音识别 (Speech Recognition) 程序的基本函数, 大大简化语音编程的难度, 降低语音编程的工作量。在下文中通过开发一个简单的TTS程序, 给出文语转换程序的编写方法, 程序开发环境为VC++6.0、Windows XP SP3。

2 Microsoft Speech SDK

目前常用的Microsoft Speech SDK有3种版本:5.1、5.3和5.4。5.1版本支持XP系统和Server 2003系统, 需要下载安装, XP系统默认只带了Microsoft Sam英文男声语音库。5.3版本支持Vista系统和Server 2008系统, 已经集成到系统里, 默认带了Microsoft lili中文女声语音库和Microsoft Anna英文女声语音库。5.4版本支持Win7系统, 已经集成到系统里, 同样带了Microsoft lili中文女声语音库和Microsoft Anna英文女声语音库。Microsoft lili支持中英文混读。

SAPI全称The Microsoft Speech API, 即微软语音API, 由Microsoft Speech SDK提供。SAPI是架构在COM基础上的, 包括以下几类组件对象 (接口) :

(1) Voice Commands API, 对应用程序进行控制, 一般用于语音识别系统中, 识别某个命令后, 调用相关接口使应用程序完成对应功能。

(2) Voice Dictation API, 听写输入, 即语音识别接口。

(3) Voice Text API, 完成从文字到语音的转换, 即语音合成。

(4) Voice Telephone API, 语音识别和语音合成综合运用到电话系统上, 利用此接口可以建立一个电话应答系统, 可以通过电话控制计算机。

(5) Audio Objects API, 封装了计算机发音系统。实现文语转换需要Voice Text API。

3 软件设计

软件实现的功能:一是将文本转换为语音进行播放, 二是将文本转换为语音保存为WAV文件。软件运行界面如图1所示。

界面的上端为编辑框, 在这里可以输入需要朗读的文本, 也可以直接将文本粘贴进去。在编辑框下面, 左边是4个按钮, 依次是播音、暂停、停止和保存, 右边是一个列表框, 列出了当前系统里安装的所有语音库, 点击可以选择相应语音库。界面的最下端是语速和音量调节滑动条。

程序的源代码中已经包含了SAPI需要的头文件和库文件, 不需要再下载安装Microsoft Speech SDK 5.1了, 只需在使用语音引擎前包含头文件和lib库:

#include"sapi.h"

#include"sphelper.h"

#pragma comment (lib, "sapi.lib")

4 代码实现

一个简单的文语转换过程是: (1) 初始化语音引擎, 获取ISp Voice接口; (2) 获取ISp Voice接口后, 通过接口指针m_Ip Voice调用SAPI函数Speak朗读文本; (3) 使用完语音引擎后, 释放资源。

4.1 初始化语音引擎

在使用语音引擎之前进行初始化, 在类CTts定义如下成员变量:

4.2 使用ISp Voice接口

4.2.1 主要成员函数

(1) HRESULT Speak (const WCHAR*pwcs, DWORD dw Flags, ULONG*pul Stream Number) ;

功能:朗读文本。

参数:

*pwcs输入的文本字符串, 必须为Unicode, 如果是ansi字符串必须先转换为Unicode。

dw Flags用来标志Speak的方式, 其中SPF_IS_XML表示输入文本含有XML标签。

Pul Stream Number输出, 用来获取当前文本输入的等候播放队列的位置, 只有在异步模式才有用。

(2) HRESULT Pause (void) ;

(3) HRESULT Resume (void) ;

功能:暂停/恢复朗读文本。

(4) HRESULT Set Rate (long Rate Adjust) ;

(5) HRESULT Get Rate (long*p Rate Adjust) ;

功能:设置/获取语速, 范围是[-10, 10]。

(6) HRESULT Set Volume (USHORT us Volume) ;

(7) HRESULT Get Volume (USHORT*pus Volume) ;

功能:设置/获取音量, 范围是[0, 100]。

(8) HRESULT Set Sync Speak Timeout (ULONG ms Timeout) ;

(9) HRESULT Get Sync Speak Timeout (ULONG*pms Timeo ut) ;

功能:设置/获取同步超时时间。由于在同步模式中, 调用Speak后程序就会进入阻塞状态等待Speak返回, 为免程序长时间无响应, 应设置超时时间, 单位为毫秒。

(10) HRESULT Set Output (IUnknown*p Unk Output, BOOL f Allow Format Changes) ;

功能:设置输出。

这些函数的返回类型都是HRESULT, 如果成功则返回S_OK。

4.2.2 朗读编辑框中的文本

4.2.3 保存语音为WAV文件

4.2.4 TTS消息响应

4.2.5 获取/设置语音库

4.3 退出语音引擎

使用完语音引擎后, 退出程序前, 释放资源:

5 语音库

TTS软件只是一个文本朗读软件, 要想达到比较好的语音输出效果, 还需要语音库的支持。打个比方, 微软的Word软件, 实现了所见即所得, 但是要想实现漂亮的文字输出效果, 必须有相关字体库支持, 包括各种英文字体库和中文字体库。所以, 除了系统自带的语音库, 建议TTS软件使用者在自己的系统中安装几个较好的第三方语音库, 配合TTS朗读软件, 会收到比较满意的输出效果。

第三方语音库有很多, 推荐如下:

可以在网址http://www.q1qq2.com/tts/tts.html下载, 也可以自行到网上搜索下载。

6 结语

VC开发环境 篇5

关键词:数字地图,OLE,集成开发

1 引言

MapInfo作为一个功能强大的地理信息系统(GIS)开发工具,被广泛应用在统计、测绘、水利、军事、环保等领域。它为用户提供了先进的数据可视化、信息地图化技术,并且提供了集成数字地图开发方式,方便用户在其他应用程序(如Visual C++、Visual Basic、Delphi等)中利用MapInfo的地图元素进行集成数字地图编程开发。

通过在VC++环境下完成MapInfo的集成数字地图开发功能,详细介绍了在集成数字地图环境下应用C++和MFC的编程过程。这种在VC++环境下的集成开发方式极大地发挥了VC++和MapInfo两种应用软件的优点,为数字地图信息系统的应用提供了广阔的平台。

2 开发环境

目前计算机技术发展迅速,大多数计算机软硬件性能都能满足应用软件开发要求。一般性的构建编程环境如下:在Windows 2000/XP操作系统下安装Visual C++6.0和MapInfo6.0软件,另外需安装MapBasic开发软件获取mapbasic.h文件,在开发中便于使用;硬件要求必须有足够的内存可以同时运行客户程序和MapInfo,客户程序采用OLE自动控制。

3 开发实例

本软件采用VC++面向对象编程语言实现,主要步骤如下:

(1)创建框架程序,实现OLE自动化客户支持。

1)启动Visual C++,利用MFC AppWizard应用程序向导创建一个单(多)文档应用程序projectname。创建过程中各选项可保留默认选择,创建完成后按如下步骤在程序中加入自动化支持代码:

(1)在stdafx.h中原有#include后加入代码:

2)利用MFC添加MapInfo支持类,为该类创建一个对象,并获取存放当前可执行文件的完全路径。

(1)选择“View”->“ClassWizard”菜单,再选择“Add Class”标签下的“From a type library”,弹出“import a type library”对话框,在查找范围选项里打开MapInfo安装路径下的“professional”文件夹下的“mapinfow.tlb”文件,单击“OK”按钮确定所选中的类,这样创建的类将允许通过OLE自动界面访问MapInfo。

(2)打开projectname.cpp文件,添加如下代码:

(3)为满足程序通用性,先将mapbasic.h文件拷贝到工程文件夹下,打开mapinfow.h文件,在该文件尾部加上如下代码:

此时,已经成功添加了MapInfo,并可访问OLE自动化对象。

(2)创建含有MapInfo数字地图元素的子窗口,获取该子窗口标识及句柄,实现应用程序与该子窗口的交互。

1)在类视图头文件(projectnameView.h)中加入成员变量:

2)在工程debug文件夹下创建map文件夹,将待装入的数字地图文件(假设文件名为ditu)存放在其中,在类视图实现文件(projectnameView.cpp)中添加如下代码:

(3)在OnInitialUpdate方法中,装入数字地图文件,并获得其标识及句柄。

(3)添加Mapinfo的数字地图编辑工具,这里添加“选择”、“拖动”、“放大”、“缩小”4个工具。

1)创建四个菜单命令项:Selector、Grabber、Zoom-In、Zoom-Out。定义它们的ID号为ID_TOOLS_SELECTOR、ID_TOOLS_RECENTER、ID_TOOLS_EXPAND和ID_TOOLS_SHRINK。对于每个工具命令,在MapBasic.h中有相应的状态定义标识M_TOOLS_SELECTOR、M_TOOLS_RECENTER、M_TOOLS_EXPAND和M_TOOLS_SHRINK。

2)为跟踪当前选择的每个工具,在CprojectnameView中定义一个私有成员变量:

int m_eMouseMode;

3)在构造器中初始化该变量,将数字地图工具的初始状态定义为“选择”。

m_eMouseMode=M_TOOLS_SELECTOR;

4)利用ClassView向导为每个工具添加COMMAND和UPDATE_COMMAND_UI函数,下面以Selector工具为例进行添加,其他类似。

(4)编译并运行程序。成功之后MapInfo在VC++环境下的集成开发平台就搭建好了,用户可以根据自己的需要添加各种算法实现数字地图应用功能,如路径规划、地理信息查询等。

如图1所示是一个路径规划的例子,为其添加了路径规划按钮G和保存按钮S,在路径规划按钮响应函数中添加路径规划算法。这里以北京到呼和浩特的飞机航线为例,规划好的路径可以通过保存按钮保存成Mapinfo数字地图文件,方便二次开发和利用。

4 结语

从实用性出发,详细介绍了在应用广泛的VC++环境下完成MapInfo集成数字地图的开发过程,该开发过程通用性较好,为数字地图信息系统应用程序开发提供了良好的平台。用户可以根据实际需要添加各种算法以实现数字地图的应用功能。

参考文献

[1]高强,朱安国.Visual C++高级编程技巧[M].北京:人民邮电出版社,2000.

[2]侯俊杰.深入浅出MFC[M].北京:华中科技大学出版社,2001.

VC开发环境 篇6

轧辊是轧钢机上的重要零件, 利用一对或一组轧辊滚动时产生的压力来轧碾钢材。它主要承受轧制时的动静载荷、磨损和温度变化的影响。一旦采用不合理的制造方法, 将会因制造中产生过大的残余应力而断裂。合理设计轧辊的制造工艺以及减少设计中的事务性工作, 对提高轧辊工艺编制效率、控制产品质量是非常重要的。

1 轧辊制造工艺CAPP系统

传统的轧辊制造工艺是由工艺师手工查询数据资料根据经验设计安排, 这就使工艺设计过程事务繁琐, 并且受到了工艺师经验的限制, 导致编制工艺的效率低, 产品的质量得不到保证。为解决上述问题, 采用计算机辅助工艺规程设计 (CAPP:computer aided process planning) , 借助计算机软硬件和支撑环境, 利用计算机进行数值计算、逻辑判断和推理等功能来建立包括工艺卡片、工艺内容及工艺规程在内的计算机辅助系统[4]。同时与人工智能相结合充分利用工艺专家的经验和知识, 从实际出发提供备选的工艺方案。利用VC++可视化程度高的优点, 为轧辊制造工艺CAPP系统提供了简明方便的人机交互式平台。

不考虑传统轧辊制造原有的环境和模式就去构建具体的CAPP模式是不合理的, 所以需要将轧辊制造工艺CAPP系统的功能分解成一个个相对独立的工具, 用户根据轧辊具体情况输入数据和知识, 通过VC++形成特定的制造和管理环境的轧辊制造工艺CAPP系统, 提高通用性。

现阶段随着轧辊制造过程信息化的不断深入, 传统制造工艺各环节之间的信息却得不到有效的交流, 很大一部分信息需要重新输入, 这是降低生产轧辊工作效率的主要原因。这时, 轧辊制造工艺CAPP系统在整个信息交流中要起到桥梁的作用。VC++软件开发平台给不同的软件留有接口, 通过接口实现对各种软件的操作, 大大提升了轧辊制造CAPP系统的集成性。

2 轧辊工艺设计CAPP系统开发的总体功能结构

为了实现自动选择加工工艺和计算加工切削用量, 系统包括材料的选择、数据的输入, 通过几项选择和可视化界面数据的输入, 可以实现人机交互式CAPP系统, 并得到Auto CAD绘制的毛坯图、Word输出的机械加工工序卡片和工艺设计说明书文档, 系统功能结构如图1所示[2]。

3 轧辊制造CAPP系统功能介绍

3.1 信息的输入与整合

VC++具有可视化程度高的特点[1], 数据的输入可以实现人机交互式输入, 图2是名称数据输入对话框。需要输入的信息包括产品名称及型号、零件名称、零件材料、零件基本尺寸。

输入产品名称及型号, 注明零件所应用什么型号的产品, 这里所用的是输入方式, 当企业实际应用时, 还可以把这里设计成选择方式, 程序中规定各选项的保存路径, 这样该区域输入的数据将会给整个计算各结果的输出做好标记和归类, 可以方便保存和查找。

输入零件名称, 将为整个工艺设计进行命名。选择零件材料, 材料的种类可根据企业制造要求的实际情况进行完善。

以上3个选项输入好后, 点击下一步, 进行轧辊基本尺寸的输入, 如图3。轧辊基本尺寸的输入包括工作段和轴承段的长度, 端面直径, 外圆粗糙度, 端面粗糙度。这些数据以轧辊JC128*082*15*R2.2-C为例, 设定了初值。当改变初值时, 编辑框内的粗略图会随着数据而变化。

零件基本尺寸输入完成后, 点击下一步。设计程序时, 将计算所用到的知识和逻辑算法编入程序, 这样输入的数据会在程序内部进行计算、圆整, 得到毛坯的有关数据和机械加工工艺顺序以及切削用量。并且得到简略的工艺安排, 如图4所示。

3.2 毛坯图的生成

毛坯图的生成是利用参数绘图实现的, 采用命令文件作为参数绘图接口, 控制Auto CAD软件自动出图, 极大地提高设计效率。本例中输入的数据经过计算作为绘图函数参数, 点击“毛坯图CAD”, 系统自动运行Auto CAD, 绘制零件毛坯图, 如图5。

3.3 机械加工工序卡片的生成

机械加工工序卡片的生成是利用模板法生成参数化计算书。输入的数据经过计算和工艺顺序的排序作为生成机械加工工序卡片函数的参数, 点击“工艺卡片”, 系统自动运行Word, 并调用编程时编制的模板, 生成机械加工工序卡片, 如图6。

3.4 工艺说明书的生成

工艺说明书的生成是利用VC++生成纯文本文件。输入的数据经过工艺顺序的排序, 切削用量的计算作为生成工艺说明书函数的参数, 点击“工艺说明书”, 系统根据函数自动生成纯文本文件的工艺说明书, 把工艺设计过程和切削用量计算结果都保存下来, 以便核对, 如图7。

4 结语

轧辊制造工艺CAPP系统集成了操作简便、运行速度快、可视化程度高的优点, 方便了制造轧辊工艺编制中各环节的交流和规范化, 减少了重复输入这种事务性的工作, 使轧辊工艺编制效率大为提高, 并且更有效地保证轧辊质量。因此开发轧辊CAPP系统的技术路线是可行的, 可供开发其他CAPP系统参考。

参考文献

[1]陶元芳.机械工程软件技术基础[M].北京:机械工业出版社, 2010.

[2]陶元芳.机械CAD应用技术[M].北京:机械工业出版社, 2012.

[3]艾兴, 肖诗纲.切削用量手册[M].北京:机械工业出版社, 1985.

[4]陶元芳, 王芳, 陈琴芬.C语言命令文件式参数绘图函数集[J].太原重型机械学院学报, 2002, 23 (2) :107-112.

[5]陶元芳, 卫良保.VC++命令文件式参数绘图类库[J].太原重型机械学院学报, 2003, 24 (4) :284-289.

[6]陶元芳, 张长利, 苗苗.实现文档自动化的几种方法[J].机械工程与自动化, 2009, 157:193-195.

VC开发环境 篇7

随着信息技术的发展,数据信息处理技术在人们的日常生活中的应用日益普及。列车查询系统就是用现代的、发展的思想和观念,运用数据信息处理技术而设计出来的。在火车交通高速发展的今天,列车查询系统为人们的出行提供了更便捷、更准确、更省钱的最佳参考路线。Visual C++是一门面向对象的程序设计语言,随着Visual C++的推广,其应用领域越来越普及。Visual C++中提供了多种方便易用的数据库开发途径和功能强大的类库,其增加了数据库开发的灵活性,减轻了开发的复杂性。Visual C++开发数据库的主要方法有ODBC和DAO,列车信息查询系统应用的是Visual C++的ODBC数据库来设计与开发的。

2 列车查询系统的主要功能

列车查询系统主要实现通过输入列车的车次、线路、到站或发站信息来查询相关列车的具体信息。列车查询系统的主要功能有:

2.1 全部列车信息的显示

显示列车信息数据库中的所有信息。

2.2 查询列车信息的显示

通过输入车次、线路、到站或发站来查询满足条件所有车次,并相应的查询出该车次的始发站、终点站、发站、到站、历程、历时、发车时间、到站时间、车次类型等各种信息。

2.3 车次详细信息的显示

显示所选中车次的每一站到站时间、发站时间、历程、历时等信息。

3 列车查询系统的实现

列车查询系统是在Visual C++6.0环境下编程实现的。列车信息数据是通过Access数据库来存储的。

3.1 列车信息数据库的建立

根据列车信息,在Access上创建一名为Train的数据库,并为其添加一列车表。表的主要字段有车次、路线、始发站、终点站、发站、到站、发车时间、到时、票价等信息。数据库中采用的是“中国第六次火车提速”的最新数据。

3.2 建立数据源

在创建ODBC应用程序前,要先建立一与Train数据库对应的Query数据源,它告诉应用程序将操作哪个数据库及所使用的ODBC驱动程序。数据源的创建是通过控制面板中的管理工具的“数据源(ODBC)”来实现的。

3.3 列车查询系统应用程序的实现

利用AppWizard新建一需要数据库支持Query工程。

3.3.1 列车查询系统界面的设计

在列车查询系统界面中不需要选择目录或者菜单,而是在用户输入区里面直接输入想要的查询信息,并能立即显示查询列车信息。根据系统功能分析,系统界面设计如图1所示。其中界面上面部分显示的是全部列车的信息,中间部分是用户输入区,即用户在此处输入查询条件,下面部分显示的是所查询列车的信息。界面中信息的显示是通过DBGrid控件及Microsoft RemoteData Control控件来实现的,查询条件的输入是通过组合框实现。

3.3.2 全部列车信息显示功能的实现

在负责全部列车信息显示的控件中进行如下设置:Microsoft RemoteData Control控件,主要负责与数据源中的数据表的连接,在其Control属性中,将DataSource设置为“Query”,将SQL设置为“Select * from 列车表”;DBGrid控件,主要通过与Microsoft RemoteData Control控件的连接来实现数据表中信息的显示,将其DataSource属性设置为IDC_REMOTEDATACTL1。

3.3.3 查询功能的实现

在如图1所示的组合框中输入或选择一条或多条的信息来进行查询,查询功能的实现是通过“查询”按钮来完成的。将满足条件的结果显示在界面下面的DBGrid控件中。“查询”功能的部分代码如下:

3.3.4 查看车次详细信息的实现

在已查询到的所有信息中,任点击其中一条,便显示其对应车次的所有站的到时、发时、历程、历时等信息。该信息的显示是通过如图2所示对话框实现的。部分程序代码如下:

本程序在Visual C++6.0环境下调试通过。

4 列车查询系统的使用说明

列车查询系统操作方便。如果用户想查询N478次列车几点从日照发车,几点到济南,用户只需在系统界面用户输入区输入或选择车次为N478,始发站为日照,终点站为济南的信息,点击“查询”按钮后,便可显示查询结果,如图3所示。如果用户想查询从日照到曲阜的列车,只需输入或选择发站为日照,到站为曲阜,点击查询后,即刻显示查询结果。

当用户在已查询到的下方的信息栏中点击第一行的任意位置,便可弹出如图4所示的对话框,对话框中显示的便是N478次列车的每站信息情况。

5 结束语

应用Visual C++的ODBC数据库设计与开发的列车信息查询系统,具有良好的用户界面,操作方便快捷,功能较齐全,具有一定的可应用性。

摘要:应用Visual C++的ODBC数据库来设计与开发的列车信息查询系统,具有良好的用户界面。系统中实现了通过车次、路线、发站及到站信息来查询列车详细信息的功能。

关键词:Visual C++,ODBC,数据库,查询系统

参考文献

[1]冯华,Visual C++数据库开发技巧与实例[M],机械工业出版社,2000.

[2]Robert D.Thompson,MFC开发人员参考手册[M],机械工业出版社,1998.

上一篇:教学设计小议探讨下一篇:宫颈上皮内肿瘤