VC开发环境范文
VC开发环境范文(精选8篇)
VC开发环境 第1篇
1.1MapX的功能本质-MapInfo professional的角度
MapX是一种基于Windows操作系统的标准组件, 能支持绝大多数标准的可视化开发环境。利用MapX, 编程人员可以选用自己最熟悉的开发语言在系统应用中嵌入GIS功能, 增强系统应用的空间分析能力, 实现系统应用的增值, 并且可以脱离MapInfo的软件平台运行。MapX采用与MapInfo Professional完全相同的技术, 实质上, 使用MapX, 就是用程序语言, 实现MapInfo可以通过菜单和按钮实现的功能。二者的知识点完全相通。要了解和运用MapX, 必须要掌握MapInfo平台的使用。同样, 熟悉了MapInfo平台, 也就更容易理解MapX的数据模型和操作模型, 更容易掌握MapX的相关应用。
MapInfo采用了地图分图层处理的方法, 每个图层对应若干个基本文件, 其中包括: 属性数据的表结构文件 (TAB) 、属性数据文件 (DAT ) 、交叉索引文件 (ID) 、空间数据文件 (MAP) 以及索引文件 (IND) 。索引文件并不是必须的, 只有当用户规定了数据库的索引字段后才会自动产生索引文件。各文件的格式及数据关联机制如图1所示。
MapX组件对文件格式及数据的要求与MapInfo完全一致。MapX组件实现了MapInfo的绝大部分功能, MapX组件的基本构成单元是Object (单个对象) 和Collection (集合) 。其中, 集合包括对象, 是多个对象的组合。每种对象和集合负责处理地图某一方面的功能。位于顶层的是Map对象本身, 其它对象集合如图层、数据、装饰等是其下的分支。图2列出了Map对象和相关子对象的层次图。
1.2MapX的编程本质-COM的角度
MapX是一个实现了双接口的ActiveX组件, ActiveX组件基于COM技术, 在使用MapX的过程中, 理解一些COM知识非常有益, 这样, 不仅可以做到“知其然”, 而且还能做到“知其所以然”。
COM是Microsoft的Component Object Model缩写, 它不仅定义了组件程序之间进行交互的标准, 而且也提供了组件程序运行所需要的环境。COM本身要实现一个称为COM库的API, 提供诸如客户对组件的查询, 以及组件的注册/反注册等一系列服务。这也是为什么使用MapX需要先向操作系统注册的原因。COM通常的发布形式是:以win32动态链接库 (DLL) 或可执行文件 (EXE) 的形式发布。COM的目标和特性在于:一是要建立在二进制代码级上的可重用性 (通过包容和聚合) ;二是体现语言无关性, 只要其能生成符合COM规范即可;三是对使用COM对象的客户程序而言的进程透明性。COM对象的可重用性表现在COM对象的包容和聚合, 一个对象可以完全使用另一个对象的所有功能。这象C++对象, 其可重用性表现在C++类的继承性上。理解了这一点, 就能够很容易地理解图2所示的MapX的对象层次关系。
接口是如何使用组件对象的“协议”。用COM开发意味着使用接口, 接口定义一个对象能做什么, 实现接口的类定义它怎么去做。COM对象的接口可以是双接口, 与普通接口之处在于其从Automation基本接口Idispatch继承, 这样, 即使是脚本语言也可以调用, 但代价是使用的数据类型会受到限制。普通接口则从Iunknown接口直接继承。MapX就是实现了双接口的ActiveX组件。因此, 对MapX编程时, 要大量地与Idispatch接口打交道。不过, 用户不必为此担心, 因为MapX在分发时已经经过包装, 每个对象都有对应的DispatchDriver类, 使用它们, 就好像使用普通的C++类一样 (定义在mapx.h和mapx.cpp中, 所以必须将这两个文件包含在工程中) 。有一点用户无法回避, 双接口模型对数据类型的使用限制使得开发中要经常使用双接口支持的COM数据类型, 特别是VARIANT数据类型。
1.3MapX与编程环境交互本质出接口
在针对MapX编程的过程中还要大量处理MapX的事件。在MapX事件机制中, 鼠标事件首先被MapX截取, 然后以出接口的形式与用户进行通讯。所谓出接口, 是与入接口对应的。入接口是平时用户使用最多的接口形式, 用户是主动的, 组件是被动的, 组件在接收到用户的请求后作出反应。出接口的通信方向与入接口相反, 是指对象主动与客户通信, 在适当的时机调用客户准备好的功能。MapX中的事件的本质就是由用户程序实现的出接口。
出接口包含一组成员函数, 每个成员函数代表了一个事件、一个通知或一个请求。例如, 当组件中某个属性被改变时, 它可以发送一个通知;而当特定事件发生, 如用户鼠标操作发生时, 对象产生一个事件, 客户程序便有机会处理这个事件。这是MapX处理鼠标及各种其它事件, 如MapViewChanged、ResolveDataBind等的内部机制。
在用户程序方, 实现这些接口的对象称为接收器 (sink) 。接收器本身也是一个COM对象, 但它往往比较简单, 只用于监听并处理组件对象的通知或请求。同样, 使用MapX的用户并不要为此花费太多精力, 因为各种开发环境都加入了对出接口的自动化支持。例如, VC环境加入了对出接口映射的支持, 在利用VC的MFC对MapX进行开发的过程中当涉及到定制事件操作时, 用户所需要做的, 仅仅是针对需要响应的事件, 在BEGIN-EVENTSINK-MAP和END-EVENTSINK-MAP () 中准备好消息处理程序, 即, 实现相应的出接口函数。当然, 因为这些函数是MapX组件的回调函数, 因此MapX组件模型事先已经对参数类型、参数个数有了明确规定, 应用程序开发必须符合这些参数及格式要求。
2在VC环境中应用MapX的几项重要技术
2.1MapX编程中用户定制工具的使用
MapX编程中的经常的操作是在用户定制的工具中操作MapX实现特定功能。在MapX中使用自定义工具时, 一般要经过3个步骤:创建工具、编写工具处理程序和使用工具。
(1) 创建一个定制工具。
在适当地方 (如View类的OnCreat方法中) 调用MapX的CreateCustomTool方法, 通知MapX用户定制了一个工具。调用CreateCustomTool指定了3个必需的参数:TOOL-ID、Type和CURSOR-ID。用TOOL-ID能够确定此工具, 后两个参数是工具的类型及光标。
(2) 在TooLUsed事件编写工具处理程序。
所有用户定制工具的操作代码都在这里执行。TooLUsed事件输入参数中有TOOL-ID, 不同的工具, 仅仅是TOOL-ID不同而已。因此, 这里将是由TOOL-ID区别的多个case或if模块, 不同工具实现不同操作。
(3) 使用工具。
就是要把自定义工具交付给用户。在VC平台上, 就是将鼠标点击工具栏中的按钮的操作转化为对MapX的SetCurrentTool函数的调用, 用TOOL-ID作为参数将自定义工具设置为当前使用的工具。用户点击后, 根据CURSOR-ID光标相应改变形状, 执行的操作就是TooLUsed事件中TOOL-ID对应的代码。
2.2MapX编程中数据文件的操作
MapX有自定义格式的数据文件, 就像是一个access表一样, 即.tab文件和.dat文件。前者类似于表结构定义, 后者类似于表中的数据。那么, 对数据文件的操作也类似于操作一个access表或SQL server表一样。下面介绍的是最常使用的方法。
(1) 以MapX应用程序中建立数据文件。
此方法往往是响应“新建”菜单, 然后执行创建数据文件结构的操作, 即建立.tab文件。就像数据库有字段 (field) 一样, MapX也有一个字段集合 (在VC中是CMapXFields) , 建立数据库结构的操作分为3步, 一是建立字段。即不断调用CMapXFields的各种方法, 如AddStringField、AddNumericField等等的方法, 在CMapXFields对象中添加各个字段, 至于字段名, 字段长度, 就在方法的参数中;二是生成图层信息对象。即利用CMapXLayerInfo的AddParameter方法将CMapXFields对象, 以及图层的名字、相应文件的名字等信息与CMapXLayerInfo对象关联;三是在MapX中建立这个图层。即调用CMapX.GetLayers () .Add (layerInfo) 方法。此时.tab文件已经生成, 因它是文本文件, 可直接查看。
(2) 在MapX应用程序中使用数据文件。
使用数据文件的过程, 就是向数据文件中添加数据记录的过程, 就像在access表中添加记录一样。相应地, 在MapX中, 记录用CMapXRowValue类表示, 记录集用CMapXRowValues类表示。一是将图层对象与数据集 (CMapXDataset) 对象关联 (因为不仅仅是图层可作为数据集, 其它像数组、或是真正的一条access记录等都可以是数据集) 。这要用到CMapX.GetDatasets () .Add方法, 并以相应图层对象为参数, 方法返回一个与之关联的数据集对象;二是先用字段值填充CMapXRowValue对象, 再将其添在CMapXRowValues集合对象中;三是将图元GIS信息与对应的属性数据关联, 即调用layer对象的AddFeature方法, 它的参数是图元对象 (如椭圆) 和数据集对象 (即这个椭圆的属性信息) 。此时, 相应的.dat的数据已经更新, 可通过MapInfor打开验证并查看。
2.3MapX编程中事件的操作
使用MapX的事件的关键是事件槽 (Event sink) 宏中奇形怪状的事件参数。只要掌握一定的技巧, 在MapX编程中添加事件的操作就是在BEGIN-EVENTSINK-MAP和END-EVENTSINK-MAP () 宏中将MapX自定义的事件与用户定义的函数关联的过程。
问题是, 用户自定义的函数与MapX自定义事件的参数必须完全一致, 而这些参数极其复杂。实际上, 用户根本不必去记或是去查找这些参数格式, 有一个非常简单的办法, 即利用VC环境提供的Dialog对话框工具。方法是, 先将MapX控件调入工具箱, 即在Visual studio 2005环境中选择“工具/选择工具箱”菜单, 在弹出的对话框中选择“com”页并找MapX控件 (如MapInfo MapX V5) 。然后新生成一个专门用于测试的对话框, 当将MapX控件拉入到此对话框后, 所有的MapX事件就全部显示在此测试对话框的事件属性页中了。
此时, 要添加事件, 则先在试对话框中, 利用VC环境自动在测试对话框中添加, 然后, 把生成的代码拷贝到实际需要的类中的事件槽映射宏就可以了。
3鹰眼的实现
鹰眼图是GIS应用程序中的一个基本功能, 其不仅能查看视图框中所显示的地图在整个地图中的位置, 而且当点击鹰眼图某处时, 视图框中的地图也相应地移动到点击处。从而实现了地图的快速查看。一般地图主视图是在视图中显示, 而鹰眼图是另外的对话框显示的。下面介绍在VC中实现的原理。
图3是我们实现的鹰眼示意图, 左侧地图是鹰眼图, 其中的小黑框表示视图框中的地图在整个地图中的位置。实现思路: 在程序主视图类和一个对话框中分别创建MapX 控件来控制主视图和鹰眼图, 然后在鹰眼图上创建一个图层, 用来添加一个表示主视图中地图的矩形框, 该矩形框的大小和位置随着主视图边界的变化而变化, 反之亦然。
两个视图之间的沟通这主要是利用MapX 控件的内置消息MAPX-DISPID-MAPVIEWCHANGED的映射函数OnMapViewChanged () 来实现。当主视图发生变化时, 主视图中的MapX控件发出消息, 调用OnMapViewChanged () 函数, 函数通知鹰眼对话框中的MapX控件来添加矩形框。通知走过的路线可能是这样:先利用SendMessage通知主框架类, 再由主框架类调用鹰眼对话框的OnMapViewChange函数, 在此函数中处理在鹰眼对话框中添加矩形框的操作。在这个方向的通知中, 主视图的OnMapViewChanged () 是通知的发送者, 鹰眼对话框的OnMapViewChange函数是通知的处理者。
通知是双向的, 当鹰眼图发生改变时, 同样要通过主框架类为中介, 通过调用Doc类的UpdateAllViews通知主View类改变显示。这个方向的通知的发起者可能是鹰眼对话框鼠标按键抬起函数, 如MouseUpEagleEyeMap, 而消息的处理者是主View类的OnUpdate函数。所有MapX特殊消息的处理, 都可以通过2.3中介绍的方法来实现。
4结束语
本文概括阐述了在VC环境中使用MapX进行二次开发的一些体制、方法、技巧, 以期能够帮助初学者尽快进入对MapX更深层次的学习和应用。限于篇幅, 本文未提供详细的代码。该程序在Windows XP下的Visual studio 2005环境测试通过。
摘要:MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX控件产品, 在分布式系统中应用MapX提供的GIS功能开发地理信息应用系统, 可以获得较大的性价比, 在实际应用中具有十分重要的现实意义。探讨MapX二次开发的机制和VC环境下使用MFC对MapX进行二次开发的技巧。
关键词:MAPX,VC++系统开发,GIS
参考文献
[1]梅霞, 郝建新, 汤晓安, 李欢.MGIS中军标符号库的设计与应用研究[J].现代电子技术, 2008 (2) .
[2]梁日辉, 罗建军.MapX在VC++中集成实现军用标图系统的研究[J].计算机应用与软件, 2005 (6) .
[3]李俊付.MapX中定制工具的实现[J].山东煤炭科技, 2005 (1) .
[4]陈静.分布式虚拟GIS关键技术研究[D].武汉:武汉大学, 2004.
[5]贺志国, 曾俊, 陈天泽, 匡纲要.设计模式在标图系统中的综合应用[J].计算机应用研究, 2005 (9) .
VC开发环境 第2篇
利用VC++封装MATLAB 6.5 C++数学库探讨测量平差软件的开发
根据测量数据处理的特点:常常要面对大量的矩阵运算和海量的`数据处理,尤其是矩阵的相乘和求逆.通过对VC++6.0和MATLAB 6.5特点的分析,探讨了利用VC++调用MATLAB6.5 C/C++数学库快速开发测量平差软件的必要性和可行性,简要地总结和分析了两者联合编程的实现方法.较详细地介绍了作者用VC++调用MATLAB 6.5 C/C++数学库开发测量平差软件的过程,解决了高程网间接平差的计算.
作 者:袁建东 张耀民 YUAN Jian-dong ZHANG Yao-min 作者单位:西安科技大学,测量工程系,陕西,西安,710054刊 名:海洋测绘 ISTIC英文刊名:HYDROGRAPHIC SURVEYING AND CHARTING年,卷(期):28(5)分类号:P207+.2关键词:VC++6.0 MATLAB6.5C/C++数学库 测量数据处理 矩阵计算 编译环境 数据转换
VC++开发垃圾清理软件 第3篇
垃圾文件是操作系统使用过一段时间生成的冗余文件, 对操作系统来说是多余的, 一般来说, 每个一段时间应该给予清理, 从而使系统更加干净, 有助于节省磁盘空间, 从而提高系统运行效率。下面主要介绍基于VC++开发的垃圾清理软件的设计与实现, 包括功能的实现和界面的设计。
2 概述
垃圾文件清理, 即对指定的文件格式的临时文件或垃圾文件进行遍历、扫描、显示、删除清理等。在程序界面设计方面, 对默认对话框重新自定义绘制, 主要包括标题栏的重绘、对话框边框的重绘、对话框背景重绘、以及最小化按钮、最大化按钮和关闭按钮等的重绘实现。经过界面的设计和功能的实现开发, 从而开发出一款具有实用意义的垃圾清理工具。
3 编程平台与技术
实现的软件开发平台是基于Microsoft Visual Studio 2008集成开发环境, 编程技术采用Visual C++编程技术, 以及相关的开发软件如Photoshop CS5等。
4 需求分析
本程序的设计与开发主要分为两大模块, 功能的设计开发和应用程序界面的设计开发。
功能的分析与设计:垃圾清理功能主要包括文件遍历扫描、显示已扫描到的文件以及垃圾文件的删除清理等。用户需要一边进行文件扫描, 另一边可以对已经扫描到的垃圾文件进行清理操作。文件扫描通常会占用大量的时间, 为了提高垃圾清理的可靠性和效率, 应该使用多线程开发技术, 即将文件扫描的任务放置在一个单独的线程中即可。
应用程序界面设计:在对话框重绘中, 使用的主要技术有两个, 一个是绘制对话框的背景位图, 在对话框大小改变时能够输出位图, 使位图能够适应对话框的大小。另一个是在对话框的指定区域输出位图。
5 程序开发与实现
5.1 垃圾文件的扫描、显示和清理
(1) 创建一个基于对话框的工程, 工程名称为“Clear Tmp File”。
(2) 向对话框中添加静态文本框、按钮、组合框、列表框、进度条等控件, 效果如图1所示。
(3) 在对话框类CClear Tmp File Dlg中添加共有的主要数据成员, 各成员功能见注释部分:
(4) 向对话框类中添加Research File方法, 判读指定的目录, 将指定的垃圾文件类型显示在扫描结果列表中:
(5) 定义线程函数, 用来单独执行扫描查找垃圾文件任务:
(6) 处理“立即扫描”或“开始”按钮的单击事件, 创建一个新的线程执行扫描文件的任务:
(7) 清理已扫描到的垃圾文件, 即采用删除文件策略, 使用Delete File () 方法:
到此, 软件的主要功能部分都已经开发完毕, 下面将进行对软件界面的设计与开发。
5.2 程序界面的设计与实现
应用程序界面的设计包括两部分, 一部分是对话框自身的重设计, 二是对话框控件的重绘, 本程序主要对按钮控件进行重绘设计。
5.2.1 绘制对话框的背景位图
绘制对话框背景位图本文采用的是处理对话框的WM_PAINT消息, 该消息初始化时候对对话框进行绘制, 从而绘制背景位图。绘制背景位图的主要代码如下:
5.2.2 在指定的区域中输出位图
为了能够在指定的区域中输出位图, 需要使用设备上下文CDC类的Stretch Blt方法。由于我们需要在窗口的非客户区域绘制位图, 因此需要使用CWindow DC类的Stretch Blt方法, CWindow DC类派生与CDC类, 它提供了在窗口非客户区域绘制位图的功能。该方法数从源矩形中复制一个位图到目标矩形, 必要时按目前目标设备设置的模式进行图像的拉伸或压缩。输出位图的主要实现代码如下:
5.2.3 对话框绘制的实现
在对话框重绘的设计与实现过程中, 一般需要绘制的对话框区域主要有标题部分、边框部分和客户区部分。具体的区域划分如图2所示。
既然要对多个区域进行位图显示输出, 所以我们先封装一个bmp位图显示输出函数如下:
对各个区域进行位图输出重绘。由于标题栏以及边框主要都是非客户区域绘制, 因此应该在WM_NCPAINT消息中绘制。当然得先通过添加资源的方式将所用到的bmp位图资源导入到项目中。
在WM_NCPAINT消息对于的方法On Nc Paint () 中调用对话框绘制方法Draw Dialog () 。该方法的功能就是绘制对话框各个区域的位图。主要代码如下:
上面代码中最后的绘制对话框标题文本的方法Draw Title Bar Text () 的主要代码如下:
在完成对话框相应区域的位图后, 并没有完成任务, 还需要处理标题栏按钮的热点效果, 以及按钮的单击事件。首先得处理鼠标在非客户区域移动时的事件, 即WM_NCMOUSEMOVE消息, 在其消息处理函数中判断当前的鼠标点是否位于标题栏的按钮区域, 如果是则设置按钮的热点效果, 并且记录当前的按钮状态, 及鼠标点在哪个按钮上。同样, 处理对话框非客户区域的单击事件, 即WM_NCLBUTTONDOWN消息, 在其消息处理函数中完成单击事件操作。这部分的代码比较简单, 在此不予显示。
5.2.4 按钮控件重绘的实现
在MFC下编程, 很多时候对于标准的按钮控件不是很满意, 想要弄得美观些。这就需要按钮重绘。重绘按钮一般的实现方法就是重写CButton类。
首先给工程添加一个自绘按钮类My Draw Button, 基类为CButton。要想让按钮具备自绘功能, 就要为按钮添加BS_OWNERDRAW属性。为类CButton重载Pre Subclass Window虚函数。在该函数中添加如下一行代码:
当按钮控件具有了自绘功能之后, 每次控件状态改变都会触发Draw Item函数, 在该函数中来绘制按钮的形态外观, 所以第二步就要重载Draw Item虚函数。在这个函数中就可以自由发挥了, 比如绘制背景、底色、按钮标题、绘制文本字体样式等。
一般都会为按钮定义几种不同状态时的外观, 比如光标滑过时的状态, 按钮按下时的状态, 按钮禁用时的状态, 以及按钮的正常状态等。这就要为新的按钮添加几种重要的消息响应。比如WM_MOUSELEAVE消息, WM_MOUSEHOVER消息和WM_MOUSEMOVE消息等, 值得一提的是前两个消息的响应函数需要自己手动添加, 微软提供了一个Track Mouse Even函数在光标离开一个窗口时投递WM_MOUSELEAVE消息, 光标滑过窗口时投递WM_MOUSEHOVER消息。一般来说可以在WM_MOUSEMOVE消息响应函数中调用Track Mouse Event函数来投递WM_MOUSELEAVE消息和WM_MOUSEHOVER消息。然后在WM_MOUSELEAVE消息的响应函数中标记“光标已经离开按钮”, 然后调用Invalidate Rect函数让按钮重绘。在WM_MOUSEHOVER消息的响应函数中标记“光标正在按钮上方”, 并调用Invalidate Rect函数让按钮重绘。
(1) 绘制按钮背景样式, 即绘制背景bmp位图, 使得按钮具有自定义的样式, 同时在绘制按钮背景的输出位图时采用Transparent Blt () 函数, 该函数的作用是使窗体上显示位图的背景与窗体背景色融为一体, 不仅可以显示按钮bmp位图样式, 而且还可以使背景透明。
(2) 就是绘制按钮上的文本。主要绘制按钮上文本的样式, 包括字体大小, 字体样式, 字体颜色等属性。
(3) 实现不同状态下的按钮的外观样式, 主要包括WM_MOUSEMOVE和WM_MOUSELEAVE两个消息的消息处理函数。分别实现鼠标在按钮区域上和不在按钮区域上的状态。为了标记鼠标移动到按钮区域内停留, 需要用到一个定时器来标记鼠标是否还在按钮区域内停留。在WM_MOUSEMOVE内启动定时器, 触发WM_MOUSELEAVE消息时结束定时器即销毁定时器。定时器的主要代码如下:
重绘按钮类My Draw Button的主要实现代码如下:
定义的一些重绘用到的变量:
消息处理函数和定义的函数:
到此, 按钮的自定义重绘完成了, 接下来就可以使用自己重绘的按钮类My Draw Button了。首先往对话框中添加一个按钮控件 (以立即扫描按钮为例) , 假设它的ID值为IDC_TEST。进入类向导 (Class Wizard) 的成员变量属性页, 为IDC_BEGIN添加一个变量m_btn Begin。如下:
然后就可以调用My Draw Button的方法来设置按钮的样式了。如下:
到现在为止, 按钮类的重绘完成了, 可以随意定义自己喜欢的样式的按钮了。现在相对完善成形的一个垃圾清理工具软件就开发完了。
最后软件的运行效果界面如图3-图6所示。
6 结语
一个用VC++开发的学习游戏 第4篇
1) 游戏设计为在局域网中的两台计算机上进行单项选择题的答题比赛, 为了使游戏生动有趣, 界面中应具有动画元素, 采用昆虫从左至右爬行时到达的位置, 指示双方的积分状况。
2) 游戏双方各设置50道单项选择题, 可以在游戏的任何一方看到另一方的积分, 积分规则为答对一题加10分, 积分首先达到500分的一方胜出。
3) 游戏采用VC++, Window7/Visual Studio 2008平台开发, 利用套接字 (Socket) 技术实现局域网中的信息传递。
2 模块设计
本游戏共由三个模块组成, 它们分别是:1) 管理模块。2) 界面模块。3) 通信模块。下面分别对这三个模块的设计要点进行说明:
2.1 管理模块
在工程中, 我们设计了一个CManage类, 该类为C++类 (普通类) :
其中, Get Ji Fen方法的代码如下:
在对话框类中定义CManage对象 (以服务器端为例) :
试题和正确答案分别放在文本文件Exam Paper.txt和Answer.txt中, 通过Get Shi Ti方法读取试题内容, 在编辑控件中显示, 通过Get Zq Daan方法读取正确答案, 存放在zqda[50]中, 通过对话框类的Jifen Cnt Send方法从网格控件中读取玩家选择的答案, 存放在da[50]中。
2.2 界面模块
2.2.1 服务器端界面
创建一个基于对话框的工程, 并在对话框上添加控件, 如图1及表1所示:
2.2.2 客户端界面
创建一个基于对话框的工程, 并在对话框上添加控件, 如图2及表2所示:
2.2.3 动画效果
我们利用计时器函数和Bit Blt () 函数在对话框上显示动画, 通过位图的交替显示实现昆虫爬行的两个分解动作, 从而实现昆虫爬行的动画效果。首先需要在工程中导入下列位图:
在工程中添加计时器函数, 计时器函数代码:
其中, Drawinsect函数的代码:
MERGEPAINT是把图形反色后再同贴图目的地进行OR运算, 而SRCAND是把图形和贴图目的地进行AND运算。黑色的RGB值为 (0, 0, 0) , 白色的RGB值为 (255, 255, 255) , 任何颜色同白色进行OR运算的结果都为白色, 任何颜色同黑色进行OR运算的结果都为该颜色本身, 所以先将bmpkc2.bmp或bmpkc4.bmp反色, 则其前景变成了白色, 背景变成了黑色, 同目的地进行OR运算后, 昆虫处为白色, 背景处为目的地原来的颜色, 如图4所示。然后将bmpkc1.bmp或bmpkc3.bmp贴在相同的位置, 贴图的白色背景同目的地颜色进行AND运算, 结果还是目的地的颜色, 但同目的地的白色进行AND运算的结果为昆虫的颜色, 这样就很好地达到了去除背景色的效果, 如图5所示。
2.3 通信模块
我们分别在服务器端和客户端添加基于CSocket类的CServer Socket类和CClient Socket类, 用于发送和接收信息。
如图6所示, 服务器端由On Listen方法创建套接字后开始监听, 客户端由On Lj Server方法向服务器端发出连接请求, 当服务器端收到连接请求时, CServer Socket类中的On Accept () 方法调用CTazhi Server Dlg类中的Accept Connect () 方法, 获取套接字指针, 并向客户端发送“连接成功”信息。双方的Receive Data方法负责信息的接收, 当收到对方发来的信息时, 套接字中的On Receive () 方法会调用对话框类中的Receive Data () 方法, 接收并处理对方发来的信息。以客户端为例, Receive Data () 函数的代码:
我们在对话框类中添加了Jifen Cnt Send函数, 用于读取网格控件中的答案, 判断输赢, 显示自己的积分和向对方发送积分, Jifen Cnt Send函数的代码:
3 结束语
生成可执行文件之后, 在一台计算机上启动服务器端程序Tazhi Server.exe, 然后在另一台计算机上启动客户端程序Tazhi Client.exe, 在服务器端单击“监听”按钮, 在客户端输入服务器端的计算机名称, 然后单击“连接”按钮, 如果连接成功, 会显示“连接成功!”对话框, 单击“确定”按钮, 然后单击“抽题”按钮, 抽取试题, 开始答题。积分首先超过500分的一方胜出。
参考文献
[1]明日科技.Visual C++项目开发实例自学手册[M].北京:人民邮电出版社, 2008.
[2]雷超然, 罗勋阳, 吴裕豪, 等.Visual C++MFC棋牌类游戏编程实例[M].北京:人民邮电出版社, 2008.
VC开发环境 第5篇
蓝牙 (Bluetooth) 是一种支持设备短距离通信的无线电技术, 能在包括移动电话、PDA、无线耳机、笔记本电脑以及相关外设等众多设备之间进行无线信息交换。蓝牙采用分散式网络结构以及快跳频和短包技术, 支持点对点和点对多点通信, 工作在全球通用的2.4GHz ISM (即工业、 科学、医 学 )频段, 其数据速率为1Mb/s, 采用时分双工传输方案实现全双工传输, 使用IEEE802.15协议。根据发射输出电平功率不同,蓝牙传输有3种距离等级: Class1为100m左右; Class2约为10m; Class3约为2-3m。
接下来将通过开发一个程序实例, 讨论在Windows系统下, 两台PC机通过蓝牙进行文本信息收发和文件传输的通信程序设计方法。程序 的开发运 行环境为 : VS2008、WindowXP SP3、蓝牙适配器。
2 蓝牙协议栈
协议栈是指一组协议的集合, 蓝牙协议栈是SIG (SpeciaInterest Group) 定义的一组协议的规范 , 目标是允许遵循规范的蓝牙应用能够进行相互间操作。蓝牙协议栈如图1所示。
目前在Windows平台上实现的蓝牙协议栈主要如下:
( 1) Widcomm: 第一个Windows上的协议 栈 , 由Widcomm公司开发 , 也就是现在的Broadcom。
(2) Blue Soleil: 由IVT公司开发 , 可用于桌面和嵌入式系统。
(3) Microsoft Bluetooth Stack: 由微软公司开发 , 在Windows XP SP2及以上版本中内建的协议栈。
上面这些协议栈都提供了SDK开发包, 开发者可以使用开发包提供的API开发自己的蓝牙应用。但是这些协议栈之间存在兼容性问题, 开发者必须针对具体的协议栈进行开发。由于微软的蓝牙协议栈已经内建在系统中, 所以一般选择Microsoft Bluetooth Stack来进行开发。开发者可以使用微软SDK中的Microsoft Bluetooth API, 也可以使用Win Sock, 二者都能实现蓝牙设备的查找、服务的发现、配对等。由于大部分蓝牙设备都提供虚拟串口服务, 所以可以使用系统中的虚拟串口进行数据通信, 也可以使用网络编程、服务器监听或客户端连接的方式来进行数据通信。
在VS2008中包含了 开发蓝牙 应用的SDK, 但是在VS2008以前的版本中 , 如VS2005、VC++6.0等 , 没有包含蓝牙SDK, 需要安装微软提供的Platform SDK。对于VC++6.0,最后一个 受支持的Platform SDK是2003年2月版。对 于VS2005, 可以安装Windows Server 2003 R2 Platform SDK, 其完整的文件名是5.2.3790.2075.51.Platform SDK_Svr2003R2_rtmimg, 文件大小是409MB左右 , 可以将文件名后缀img直接改成iso。
3 蓝牙通信程序设计
程序使用网络编程的方式, 采用服务器/客户端模式来进行蓝牙数据通信。客户端的执行流程是:(1) 搜索本地蓝牙设备, 即扫描本机上的蓝牙设备并显示;(2) 搜索远程蓝牙设备, 即扫描本机附近的蓝牙设备并显示;(3) 创建客户端套接字;(4) 发送连接请求, 连接选定的服务器, 即远程蓝牙设备;(5) 开始通信, 传输文件或收 发文本信 息 ;(6)断开连接, 客户端向服务器发送或收到服务器发送的断开连接请求时 , 即可实现 通信的断 开。服务 器的执行 流程是 :(1) 搜索本地蓝牙设备 , 即扫描本机上的蓝牙设备 并显示 ;(2) 创建服务器套接字 ; (3) 绑定套接字到本地蓝牙设备 ;(4) 建立连接 , 使用listen函数开始监听远程设备的连接 请求, 使用accept函数接受连接并返回一个用来与客户端通信的套接字;(5) 开始通信, 传输文件或收发文本信息; (6)断开连接, 服务器向客户端发送或收到客户端发送的断开连接请求时, 即可实现通信的断开。程序的运行界面截图如图和图3所示。
程序实现了服务器和客户端的功能, 将服务器和客户端做在同一个对话框界面上, 使用时用户可以选择服务器模式或者客户端模式, 也可以同时使用服务器模式和客户端模式。程序中除了主线程之外, 还设置了5个子线程, 分别是服务器监听线程、服务器接收数据线程、服务器发 送文件线 程、客户端接收数据线程和客户端发送文件线程。采用子线程方式, 可以很好地改善主线程的人机交互体验。
需要注意的是, 由于使用的是微软 实现的蓝 牙协议栈 ,所以蓝牙适配器的驱动应该 使用Windows系统自带 的驱动 ,不能使用第三方的蓝牙驱动。
4 关键代码实现
要使用Microsoft Bluetooth API进行蓝牙开发, 首先需要包含相关的头文件和导入库, 代码如下:
还要在程序开始时, 执行一次Win Sock库的初始化, 在程序结束时, 相应执行一次Win Sock库的清理, 代码如下:
4.1搜索本地蓝牙设备
搜索本机的蓝牙设备并显示, 代码如下:
4.2搜索远程蓝牙设备
搜索本机附近的蓝牙设备并显示, 代码如下:
4.3启动本地蓝牙设备
启动本地蓝牙设备作为服务器, 响应远程客户端的连接,代码如下:
4.4连接远程蓝牙设备
本机蓝牙设备作为客户端, 连接远程服务器设备, 代码如下:
4.5服务器发送信息
在服务器模式, 发送信息给客户端, 代码如下:
4.6客户端发送信息
在客户端模式, 发送信息给服务器, 代码如下:
4.7服务器发送文件
在服务器模式, 发送文件给客户端, 采用线程方式, 代码如下:
4.8客户端发送文件
在客户端模式, 发送文件给服务器, 采用线程方式, 代码如下:
4.9服务器监听线程
监听并接受客户端的连接请求, 代码如下:
4.10服务器接收信息线程
接收客户端发来的文本信息和文件数据, 代码如下:
4.11服务器发送文件线程
发送文件数据到客户端, 代码如下:
4.12客户端接收信息线程
接收服务器发来的文本信息和文件数据, 代码如下:
4.13客户端发送文件线程
发送文件数据到服务器, 代码如下:
5结语
讨论了在Windows系统下, 使用Microsoft Bluetooth API,实现两台PC机之间通过蓝牙进行文本信息收发和文件传输的程序设计方 法 , 并用VC++2008编写程序 实例 , 在WindowsXP SP3和Win8.1下测试通过。
摘要:探讨了在Windows系统下,使用Microsoft Bluetooth API实现两台PC机之间通过蓝牙进行文本信息收发和文件传输的程序设计方法,并用VC++2008编写程序实例,在Windows XP SP3和Win8.1下测试通过。
VC开发环境 第6篇
在Auto CAD二次开发技术中, object ARX虽然可以在VC环境下使用, 但其具有版本对应的限制。在VC6.0环境下开发出来的ARX库函数只能在Auto CAD2002版本以下才可以使用, 而现在普遍使用的都是2004版本以上, 这就导致无法推广和应用。本文介绍一种采用Active X自动化技术直接在MF C环境下实现A ut o C AD二次开发的方法, 有效地解决了object ARX版本不对应等问题, 实现了MFC与Auto CAD的完美融合。
1 开发技术简介
1.1 Auto CAD Active X自动化技术简介
Auto CAD从R14开始提供Active X自动化技术。对于Auto CAD, 其支持的对象、方法和属性在类型库中定义。类型库是一个文件或文件的一部分, 它描述一个或多个对象, 但不存储对象, 而是存储对象的接口描述。自动化技术将各种功能封装在A c t i v e X对象中, 供编程使用。用户通过MFC对Active X对象及其方法和属性的操作实现对Auto CAD的二次开发。
1.2 MFC环境下开发Auto CAD的实现步骤
(1) 类型库的引入。
要在MFC环境下进行Auto CAD的二次开发, 首先需要把Auto CAD的类型库引入到程序工程当中。在MFC环境下, 打开类向导对话框, 选择添加新类, 然后找到类型库文件。不同的Auto CAD版本对应的类型库不同, 但各个类型库里的函数大部分都是一样的。
(2) 常用类的添加。
类型库提供给用户编写C++接口类的全部信息, 利用MFC的类向导可以自动读入这些信息。
2 具体实现
2.1 数据机制的实现
客户程序对Auto CAD的操作是通过访问Auto CAD对象的方法和属性来完成的。从本质上讲, 对象对应于IDispatch调度接口。IDispatch的调度程序是基于类型库进行调度的, 对IDispatch的调用由好几种方法, 在MFC中是通过COle Dispatch Driver类来调用的。图2所示为MFC环境下应用自动化技术操作Auto CAD的对象访问机制 (见图1) 。
2.2 图纸的信息读取
在信号工程设计中, 往往需要读取工程图纸的各类信息, 包括统计轨道区段、信号机、应答器的个数以及图形信息的转换等这就要用到图形对象的遍历。在Auto CAD的模型空间中, 所有的图形对象都是空间中的实体, 不同类型的图形对象由不同的名称标识, 同类图形对象按照创建的时间先后分配由小到大的序号。直线对象的标识名称是“Ac Db Line”, 单行文本的标识是“Ac Db Tex t”, 这样在遍历过程中就可以依据这些标识将各类实体分类, 从而获取指定图形对象的参数信息。
3 应用举例
我们在进行铁路工程计算机辅助设计时, 需要在VC6.0环境中嵌入Auto CAD的二次开发, 以实现线路纵断面图的自动绘制和联锁表信息的自动提取等功能。
4 结语
本文介绍了MFC环境下利用Active X自动化技术对Auto CAD进行二次开发的方法, 利用此方法用户可以开发出功能强大、具有良好人机界面的计算机辅助设计软件。该方法在铁路纵断面自动绘制的研究中取得了很好的效果, 同时也可广泛应用于铁路运输、机械、建筑、土木等其他领域的计算机辅助设计当中。相对于传统的二次开发方法, 利用MFC编制的程序更具有扩展性、维护性和应用性, 在将来的Auto CAD二次开发中不失为一种更好的开发方法。
摘要:介绍了一种在VC环境下对AutoCAD进行二次开发的新方法。探讨了在AutoCAD 2006绘图平台上进行开发的实现和信息提取的实现方法。
关键词:VC,ActiveX,AutoCAD
参考文献
[1]李长勋.AutoCAD ActiveX二次开发技术[M].北京:国防工业出版社, 2005:20~25.
VC开发环境 第7篇
随着科学技术日新月异的发展,各种仪器的功能逐渐完善和增强,其复杂程度和科技含量越来越高,随之带来了维修以及培训费用的急剧增长。在以往人们通常采用实物样机模拟真实产品来进行技术人员的培训,因此培训开发的成本较高,样机易损坏。传统仪器主要包括三个部分:数据采集与控制、数据分析、数据显示。借助PC机作为其数据分析与显示的工具并利用强大的图形环境和数据处理能力,建立图形化的虚拟仪器面板,完成对仪器的控制、数据分析与显示。这种包含实际仪器使用、操作信息的软件与PC机结合构成的仪器,就称为虚拟仪器。用于虚拟仪器显示的人机界面就是虚拟仪器软面板。由于虚拟仪器充分利用了计算机的软硬件资源,构成的测试系统具有灵活、高效、成本低的优点,成为测试系统发展的主流。而虚拟数字键盘在数据采集与控制中是必不可少的。传统的虚拟数字键盘的设计采用直接程序设计的方法,虽然能满足设计需要,但其这种实现方式重用性差、灵活性不强。VC++6.0集成开发环境为我们提供了许多标准的控件,如按钮控件、编辑控件、组合框控件等。但是,这些控件无法满足用户的需要,因此经常还需要定制自己的特定控件。而利用Active X技术开发可重用控件是一种理想的方法。本文介绍了一种用Active X技术设计虚拟数字键盘用于输入和显示频率。
2 虚拟数字键盘控件设计
虚拟数字键盘控件不但要求控件外观与现实数字键盘的外观相像并具有相应的功能,而且通用性要强。本文采用Active X设计数字键盘。Active X在广义上是指微软公司的整个COM架构,但是现在通常用来称呼基于标准COM接口来实现对象连接与嵌入的Active X控件。后者是指从VBX发展而来的,其生成文件以OCX为扩展名的OLE控件。通过定义容器和组件之间的接口规范,如果编写了一个遵循规范的控件,那么可以很方便地在多种容器中使用而不用修改控件的代码。简言之,Active X使用COM实现Windows程序之间的通信,用户可以像使用Windows标准控件那样使用它,程序开发人员利用它可开发可重用的应用程序或模块。设计虚拟数字键盘控件实际上就是创建一种新类,并且Active X控件具有事件触发功能,Active X控件通过触发事件来通知容器有重要动作(如我们完成F1键的功能时,能够向容器程序发送该事件)。下面我们利用VC++6.0开发工具,开发一个用于输入频率的数字键盘,工程名字为My Work。其具体实现步骤如下:
(1)功能分析
在开发控件之前,先要分析、整理用户需求,建立完整的分析模型,将其编写成需求规格说明。需求规格说明明确地描述了控件的功能,列出必须满足的所有约束条件,并定义的输入和输出接口。
(2)设计控件
设计阶段的目标是决定控件怎么做,并且依据需求规格说明文档,确定虚拟数字键盘的实现算法、数据结构和接口等。设计控件主要集中于数据结构、用户界面和算法等方面,同时还有将现实的问题模型转换成计算机的实现模型。
(3)控件实现
控件实现阶段是将所设计的控件模块编写成计算机可执行的程序代码。
(4)控件测试
当Active X控件完成后,可以插入任何软面板容器中运行,但所有的Active X控件必须在注册之后才能使用。可以通过windows内的运行regsvr32命令,再在其后输入想要注册的Active X控件的完整路径。本例在Active X Control Test Container中插入控件进行测试。插入控件后,就可以进行输入数字并显示在该控件的液晶屏幕上,同时触发事件给容器。该控件测试完成后,就可用于任意虚拟软面板设计中。
3 控件实现方法
下面讨论如何运用Active X开发虚拟数字键盘控件的实现方法。其示意图如图1所示。
3.1 控件的属性设计
在开发程序中使用Variable name访问控件的属性,而在外部使用该控件时,使用的是External name访问控件的属性。这里,我们将新添加的频率属性的外部名称设置为n Frequecny,类型选择为short,变量名称自动被设置为m_nFrequecny,C1assWizard为该控件自动增加了一个通知函数:OnNFrequencyChanged(),当在外部修改该属性时,这个函数将被调用。然后按照此方式再添加其他属性,液晶屏幕背景灯开关bLightSwitch、类型为BOOL,数字键盘开关bTurnOnOff、类型为BOOL等。
3.2 控件的方法设计
同样,利用C1assWizard来完成添加显示频率方法。首先打开C1assWizard对话框,选择Automation选项卡,注意:在此属性页上,class name这一选项一定要选择CMy WorkCtrl。然后,单击[Add Method]按钮。该对话框中提供了几个选项,其中外部名称(External name)是给外部程序使用控件的方法时使用的,这里,我们可以将其设置为DisplayFrequency。系统自动为该方法提供了一个内部名称(Internal name):DisplayFrequency,这个内部名称是在控件内部使用的方法名称,它可以与外部名称不一样。然后将返回类型(Return type)设置为void。然后按照此方式添加其他方法,初始化设备void InitialDevice(short nFrequency)等。
3.3 控件的事件设计
在VC++中,为了给Active X控件增加自定义事件,同样可以利用C1assWizard来完成,与上面添加标准事件的过程是一样的。另外,也可以在工程的C1assView选项卡上,用鼠标右键单击_DC1ockEven}s接口,并从弹出的快捷菜单中选择【Add Event...】菜单项,从而也可以打开添加事件对话框。利用该对话框,我们为Clock控件增加一个自定义的事件,将新添加的这个事件的外部名称设置为:FrequencyChanged,系统将自动将该事件的内部名称设置为:FireFrequencyChanged.在CMy WorkCtrl类中增加了一个FireFrequencyChanged方法。在控件内部,就可以调用FireFrequencyChanged方法向容器发出频率已改变的事件通知,而在此方法内部,它会调用_DMy WorkEvents接口中的FrequencyChanged方法向容器发出事件通知。自动生成的FireFrequencyChanged方法的实现。由于篇幅所限,不能在此详细列出实现该控件的源程序。
4 主要编码介绍
5 结束
本文设计的Active X虚拟数字键盘控件用于电台虚拟维修系统软面板中,取得了令人满意的效果。如需参考源代码,可以与作者联系。
本文作者创新点:运用VC++设计一种Active X虚拟数字键盘控件。该控件克服以往在虚拟数字键盘开发过程中所暴露出的重用性差、灵活性不强等问题。
参考文献
[1]余英等.Visual C++实践与提高ActiveX篇.北京:中国铁道出版社,2001
[2]黄璐璐等.VC++6.0环境下GPIB虚拟仪器的设计.微计算机信息,2004,(5)
[3]第一时间工作室VisualC++程序设计技能百练.北京:中国铁道出版社,2004
VC开发环境 第8篇
图幅信息管理是测绘单位日常生产经营的必须环节, 随着科技的发展, 单位日出图数量最高可达220幅, 不同项目的图幅从确定生产到最后提交的周期各不相同, 因此对大量图幅信息的管理就需要一个相应的软件来支持, 以减少工作人员的工作量, 提高工作效率。
图幅信息管理系统主要用于对图幅的数据连接、添加、修改、查询等操作。本系统是对图幅信息数据库的一个MIS系统。一个季度建一个数据表, 一个数据表内一般包含约千条图幅数据, 该系统所管理的信息量较大, 日常操作频繁, 其信息的准确度关系到相关单位的工作进程, 所以需要采取必要的安全措施, 指定用户权限, 以确保只有拥有权限的人员才能登录系统, 并确保拥有登录权限的人员的口令安全。
本系统探讨了基于Access数据库软件, 采用Visual C++6.0语言, 通过ADO接口实现数据源的连接, 以及图幅信息的记录、修改、更新、查询等功能, 为提高测绘单位的管理效率和信息化管理水平发挥巨大作用。该系统可为单位的相关部门提供信息化管理平台。
2 图幅信息管理系统设计
2.1 需求分析
图幅信息管理是测绘单位规范化管理的重要方面。社会的进步和城市的发展使得效率的重要性越来越凸显, 传统的操作 (直接对表单操作) 人员工作量大, 工作效率低, 一旦对表单操作失误, 还原表单等操作费时费力, 因此测绘单位需要一个可以快速, 清晰记录并查询及修改的管理系统, 由于工作需要, 所以本程序在安全方面要求没有权限的人员无法登录系统。在这样的背景下我们开发了这个图幅信息管理系统。
2.2 系统结构
在用户需求分析的基础上, 系统的总体结构设计模块包括:系统界面、口令管理、数据源操作等。
在安全方面, 本系统采用口令确认登录, 并对合法用户的口令进行加密后保存, 同时还得保证口令在存储、输入及验证过程中的安全性。密码设置包括密码的效验、修改和密码错误的处理。用户登录成功后方可进行操作。
2.3 系统功能
图幅信息管理系统是信息管理员实时地对图幅信息进行管理, 再根据图幅信息的某些共性进行分类, 最后系统化、标准化地响应用户请求。图幅信息管理系统应该具有以下四个方面的功能:
(1) 图幅信息管理:主要是实现对信息内容的更新、分类与维护等功能; (2) 图幅信息用户管理:主要是实现对普通用户信息的分类和更新等功能; (3) 图幅信息输出管理:主要是把图幅信息以便捷的方式及时而准确地输出。
在图幅信息管理模块, 我们对数据源的链接采用了非常人性化的方式, 用到了Visual C++6.0里的LISTBOX和LISTCTRL控件, 先在LISTBOX内显示出所选数据库的所有表单, 通过指针调用在LISTCTRL下显示当前选中数据库表单的内容, 数据库可在主窗口内多次选择并打开, 这样的数据库链接方式使得日常操作灵活、轻松。
3 系统关键技术实现
3.1 口令管理及安全问题
口令管理模块主要由登录系统时的口令验证和成功登录系统后对口令的修改这两部分组成。系统管理员负责对图幅信息系统的操作用户进行必要的管理;针对不同类型的用户设定其操作权限。
由于本系统对安全性有一定的要求, 为此, 我们设置了登录界面, 以此来限制对数据库的操作和访问, 保证数据库的安全。程序运行后直接进入登录界面, 输入“用户名”和“密码”后单击“登录”按钮, 应用程序先执行一次数据库查询, 看输入的用户名和口令是否正确, 若正确则打开管理系统对话框, 若没有找到责提示“登录失败”并退出。在初始化结束后, 可以对明文进行加密或对密文进行解密。
加密:用户未输入密码则使用随机密钥进行加密, 在将会话密钥输出至隐码后将隐码的长度和内容写入目标文件 (密文) 以备解密时使用;用户输入密码, 直接从用户密码派生出密钥并用其来加密文件。
解密:用户未输入口令, 密钥是从随机数中产生的, 此时先将存储在密文中的会话密钥提取并通过Crypt Import Key () 函数解密出会话密钥;用户输入了口令, 用同加密模块完全一样的散列方法得到密钥, 并用其来解密密文[1]。
3.2 数据库的连接
本程序的图幅信息原始数据的数据量大, 表单多, 因此使用固定表单的数据库连接是不可取的, 因此本程序选择使用ADO接口, ADO对象与数据源的连接可以满足本次设计的需要。
使用ADO技术进行数据库应用程序的编写首先需要在预编译头文件stdafx.h中引入msado15.dll, 以使编译器能够正确编译。使用ADO对象之前, 需要初始化应用程序中的COM环境, 此工作可调用API函数Co Initialize () 完成。以上工作完成后便可声明一个Connection对象指针, 然后创建一个Connection对象的实例来对指针进行初始化, 并调用Open () 成员函数实现与数据库的连接。
3.3 图幅信息管理的添加、修改、删除功能的实现
进行编辑工作之前, 系统会先判断是否选中List Ctrl中的项。如果有选中项, 其对应变量的值即变为选中项索引值, 然后才能进行修改和删除操作。对应代码如下:
上述代码添加于On Click Listctrl事件中。
下面介绍主要编辑功能的实现。
3.3.1 添加
本程序分两个步骤来完成添加工作; (1) 创建添加按钮及窗口, 在添加窗口中设置一个自定义样式的List Box控件, 令其可以对其中内容进行编辑, 并且可根据数据库中数据自动生成每列列名; (2) 打开窗口后, 在可编辑区域输入待添加数据, 单击确定, 此时系统会发出自定义消息WM_MYMESSAGE, 对应的响应处理函数On Add Message。该函数先在数据库中添加一条新纪录, 然后通过自定义类CData List中定义的相关函数获取待添加数据的内容及指针, 然后将其指向新地址以字符串的格式写入数据库中。
之后使用Put Collect将数据从记录集中写入数据库。
3.3.2 修改
修改工作可分为三个步骤完成: (1) 创建按钮及窗口 (同添加) ; (2) 判断是否已选择数据。若未选择List Ctrl中数据的话, 返回一条Message提示未选择数据。若有选择, 则先将已选数据按列写入的生成的修改窗口中。系统此时会记录下修改项的索引号; (3) 编辑数据, 单击完成。系统会通过CData List类中相关函数获取新数据, 并于该项索引标识的位置将原数据替换, 完成修改。
3.3.3 删除
删除工作可分两步完成; (1) 首先在List Ctrl中选定待删除数据; (2) 单击删除按钮, 系统弹出确认提示。单击确定时, 同时从List Ctrl和库中删除索引号对应项, 完成删除操作。
3.4 文件操作时间及数据备份的实现
文件操作时间的获取是通过Cfile类的成员函数Get Status () 完成的, 核心代码如下:
由于管理信息的数据量大, 数据部分内容重复性高, 导致部分时候对数据内容的查找有难度, 文件操作时间查询的部分可以帮助用户通过时间这个关键值查找到目标数据, 方便用户查找和操作。
数据备份模块的功能主要有两个方面, 第一是方便数据的管理及较长时间后对数据的使用;第二是对数据安全性保障, 如果用户不慎发生误操作, 可以通过数据还原来减少损失, 降低人员劳动量。本模块的主要思想是将数据以其它格式存储在本机上, 当进行数据还原的时候再将数据调回来并改为原来的格式, 这样操作的好处是避免了将数据导出到excel中会产生的用户不希望的错误, 以及数据的导回困难问题。
4 系统应用
本系统实现了数据库的ADO动态连接, 图幅信息的查询、添加、修改、删除以及数据备份功能。
目前该系统已试用于某单位的图幅信息管理中, 收到良好的效果。该系统为单位管理部门提供了现代化的管理手段, 提高了管理水平, 改变了过去传统的图幅信息管理模式, 大大简化了人员在图幅管理方面的工作量, 为单位日常的生产经营做出了贡献。
5 结束语
本图幅信息管理系统实现了通过ADO对象和数据库的连接, 数据库连接达到了用户的要求, 可以灵活选择并多次连接。在对数据库的基本操作方面, 本系统实现了查询、添加、修改等功能, 在实现功能的过程中基本涉及到了ADO技术对数据库操作的主要细节。本系统现已投入使用, 基本满足了用户的需求, 但由于开发时间有限, 故还有许多可提高之处, 例如在精确查询的基础上实现模糊查询。
参考文献
[1]张灵洁, 雒喜平, 程耀东.基于VC++的考勤信息管理系统开发[J].测绘科学, 第35期增刊.165-167.
[2]罗斌.Visual C++编程技巧精选500例[M].北京:中国水利水电出版社, 2005:420-422.
VC开发环境范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。