




已阅读5页,还剩52页未读, 继续免费阅读
(机械电子工程专业论文)dwg文件离线浏览activex控件研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京航空航天大学硕士学位论文 摘要 a u t o c a dd w g 图形文件广泛应用于工程设计领域,同时也是不同c a d 软件交 换数据的桥梁。在非a u t o c a d 平台下,访问d w g 文件非常重要。本文对在非 a u t o c a d 平台下能浏览d w g 文件的a c t i v e x 控件进行了研究和开发。 ( 分析了开发d w g 文件浏览a c t i v e x 控件的重要意义以及国内外的研究现状,给 出了软件的设计方案和开发思路。对开发过程中的一些关键问题进行详细的研究。 鉴于d w g 文件是一种格式不公开的二进制文件,研究了如何采用o d t ( o p e n d w g t o o l k i t ) 读取d w g 文件数据以及如何组织程序框架。这对短期内开发 这软件有非常重要的意义。) 皿一 d w g 文件浏览的过程实质上就是从文件中读取数据,并利用所读得的数据绘制 矢量图形的过程。对d w g 文件中图形实体的绘图算法进行了研究,并编出了相应的 程序。 提出了基于文档视图结构的a c t i v e x 控件,并且研究了如何将一个基于文档视 图结构的应用程序转换为a c t i v e x 控件,并提出了开发能生成基于文档视图结构的 a c t i v e x 控件程序框架的软件的构想。 关键词:a u t o c a d 岁d w 黔a c t i v e x ,o ( 9 2 5 , x * 当m 粤i 正沙一 冷 d w g 文件离线浏览a c t i v e x 控件研究 a b s t r a c t a sa u t o c a dd w g g r a p h i cf i l ei sw i d e l yu s e di ne n g i n e e r i n gd e s i g nf i e l da n di t i s a l s oab r i d g eb e t w e e nd i f f e r e n tc a d g r a p h i cf i l e s ,v i e w i n gd w g f i l e sw i t h o u ta u t o c a d i s b e c o m i n gm o r ea n dm o r ei m p o r t a n t i nt h i sd i s s e r t a t i o n ,ad w g v i e w e rb a s e do n a c t i v e xi sr e s e a r c h e da n dd e v e l o p e d i nt h eb e g i n n i n g 场es i g n i f i c a n c eo fd e v e l o p i n gd w gv i e w e rb a s e do na c t n e x c o n t r o la n dt h er e s e a r c ha c h i e v e m e n ti nt h ew o r l da r ea n a l y z e d t h e n ,t h eb l u e p r i n ta n d m e t h o do f d e v e l o p i n gd w g v i e w e ri sd e m o n s t r a t e d s o m ei m p o r t a n tp r o b l e m si n v o l v e d w i t ht h ed e v e l o p m e n to fd w g v i e w e ra r es t u d i e di na t h o r o u g h l yw a y a sd w gf i l e si sab i n a r yf i l ea n di t sf o r m a ti su n k n o w a b l e 。h o wt og e td a t af r o m d w gf i l e sw i t ho d t ( o p e n d w gt o o l k i t ) a n dh o w t oo r g a n i z et h ep r o g r a mf r a m e w o r k a r et h o r o u g h l yr e s e a r c h e d a l lo ft h e s ea r ev e r yi m p o r t a n tt od e v e l o pad w g v i e w e ri na s h o r tt i m e i nf a c t ,t h ep r o c e d u r eo f v i e w i n gd w g f i l ei st h ep r o c e d u r eo f g e t t i n gd a t af r o mt h e f i l ea n du t i l i z i n gt h ed a t at op o r t r a yv e c t o rg r a p h i c i nt h i sd i s s e r t a t i o n t h ea l g o r i t h m so f g r a p h i c si nd w g f i l e sa r ed i s c u s s e d p a r to ft h ec o d e si nc + + p r o g r a m m i n gl a n g u a g ei s a t t a c h e d t h ea c t i v e xe o n t r o lb a s e d o nd o c u m e n t v i e wi si n t r o d u c e d am e t h o do f t r a n s f o r m i n ga na p p l i c a t i o np r o g r a mb a s e do nd o c u m e n t v i e wi n t oa n a c t i v e xc o n t r o li s p r e s e n t e d ,a n dd e v e l o p i n gs o r w a r ew h i c hc a nc r e a t e af i a m e w o r ko fa c t i v e xc o n t r o l b a s e do nd o c u n l e n 圹v i e wi sr e c o m m e n d e d k e y w o r d :a u t o c a d 、d w g 、a c t i v e x 、o d t 、d o c u m e n t v i e w 2 壹塞堕至壁墨盔堂堕主兰垡鲨塞 第一章绪论 自从2 0 世纪4 0 年代中期出现了世界上第一台计算机以后,随着计算机技术的发 展,很多新的行业不断随之出现。自从1 9 8 2 年a u t o d e s k 公司成立,第一个a u t o c a d 软件进入市场以后,全球机械工程、航天工程、建筑工程、交通、通讯工程等领域从 此开始走向摆脱手工设计,手工绘制工程图纸的道路。尤其是近十年来,计算机硬件 飞速发展,计算机已广泛应用于工程设计,d w g 文件的数量日益增多。工程图纸的 计算机管理越来越受到广大用户重视。人们迫切希望工程图档管理系统能对工程图纸 进行管理,能直接访问格式不公开的d w g 文件中的数据,并能为广大工程设计人员 提供检索、查询和调用d w g 文件等功能。随着i n t e r a c t 的诞生和发展,d w g 文件 网络传输日益频繁。网上查阅、预览、浏览、打印d w g 文件己成为迫切需要。正是 这种形式下a u t o c a d 逆向工程研究发展起来了。本论文研究a u t o c a dd w g 文件离 线浏览a c t i v e x 控件的目的正是为解决新形势下对d w g 文件提出的新要求。 1 1a u t o c a d 的发展以及d w g 文件在工程中的应用 自从第一套a u t o c a d 软件面向市场以来,a u t o c a d 软件取得了蓬勃发展,广泛 应用于机械工程,航天工程,建筑工程以及地理信息等领域中。a u t o c a d 在全球销 售量达2 4 0 多万套,遍及1 6 0 多个国家。a u t o d e s k 公司在全球拥有9 0 0 家授权培训中 心,2 9 0 0 多家注册开发商,全球有2 0 0 个用户团体,每年有1 0 0 万名学生接受a u t o d e s k 产品的培训。a u t o c a d 软件已经成为目前最为流行的绘图软件,在c a d 市场上占有 很大的份额。全球有数十亿工程图形文件采用a u t o d c s k 公司的图形交换文件( d x f l 和图形文件( d w g ) 来描述。目前很多c a d 软件都能生成和识别这两种文件,采用 d x f 和d w g 数据格式实现与其它c a d 软件交换数据。可见d x f 文件和d w g 文 件己成为事实上的工业标准。d x f 和d w g 数据格式对不同c a d 软件之间交换数据 有着举足轻重的地位。 d w g 文件是a u t o c a d 生成的一种图形文件,它是一种二进制文件,格式不公开, 在程序中实现直接读取d w g 文件的操作非常困难。用a u t o c a d 域的图纸一般用 d w g 文件描述。d x f 文件是a u t o d e s k 公司为方便d w g 文件和其它c a d 软件交换 数据而定义的一种文件格式,其格式a u t o d e s k 公司早己对外公布。通过d x f 文件实 现d w g 文件与其他c a d 软件交换数据比较简单,只要利用a u t o c a d 将d w g 文件 转化为d x f 文件,在其他c a d 软件中实现访问d x f 文件即可。但是,采用d x f 文件交换数据有以下缺陷:首先,由于d x f 文件是一种特殊形式的a s c i i 码图形交 换文件,所以文件庞大,阅读时对内存资源消耗比较大;其次,d x f 文件是一种文 本文件,需逐行阅读比较,处理速度很慢。再次,当图纸批量大时,将d w g 文件转 一旦型鱼塞生塞垡型堕垒! 迎! 茎丝堡婴窒 为d x f 文件很费时间,降低产品设计效率。鉴于采用d x f 文件交换数据的以上缺陷, 人们开始趋向于采用直接访问d w g 文件的方式实现d w g 文件与其它c a d 软件交 换数据。 由于d w g 文件在工程设计领域中的广泛应用以及在c a d 领域中的重要地位,人 们迫切希望工程图档管理系统能够实现对d w g 文件的有效管理,能够直接访问格式 不公开的d w g 文件,并能为广大工程设计人员提供检索、查询和调用d w g 文件等 功能。 随着i n t e m e t 的诞生和发展,c a d 数据在网上传输变得非常方便,因而不同c a d 系统之间的相互协同工作也越来越重要。不论是个人还是大型公司都需要通过网络传 输c a d 数据,d w g 文件的网上查阅、预览、浏览、打印功能显得重要。 总之,解决以上提出问题的关键,归根结蒂就是在开发的应用软件中实现对d w g 文件的访问。 1 2d w g 文件应用软件的几种开发方式 在本文中,d w g 文件应用软件指需要在程序中实现访问d w g 文件功能的软件。 1 2 1 独立开发 独立开发指不依赖任何a u t o c a d 软件以及与a u t o c a d 相关的工具软件,独立进 行应用系统开发,从d w g 文件的读、写到图形显示,所有的算法都由开发者设计, 然后选用某种程序设计语言,如c + + ,在一定的操作系统平台上编程实现,与 a u t o c a d 软件相比,开发过程相似,只是在功能结构上更针对应用目标。 1 2 2 单纯二次开发 指完全借助于a u t o c a d 软件提供的a u t o l i s p 和a d s 语言进行应用系统开发。用 户可以利用a u t o l i s p 和a d s 语言,以a u t o c a d 软件为开发平台,开发出自己的针对 不同应用对象的应用程序。但a u t o l i s p 不如编程语言方便,在开发较大项目时力不 从心,而a d s 虽由功能强大的c 语言编制,但较为复杂,不适应当前可视化编程的 需要。 1 2 3 集成二次开发 集成二次开发指利用a u t o c a d 及其相关软件实现操作d w g 文件的基本功能,以 通用编程软件尤其是面向对象的可视化开发工具( 如d e l p h i 、v i s u a lc + + 、v i s u a l b a s c i 、p o w e r b u i l d e r 等) 为开发平台,充分发挥a u t o c a d 软件处理d w g 文件上的 优势及可视化开发工具在应用程序开发上的强大功能,进行两者的集成二次开发。 4 南京航空航天大学硕士学位论文 集成二次开发又分两种方式。一种方式是采用o l ea u t o m a t i o n ( 对象连接嵌入自动 化) 技术,用软件开发工具开发前台可执行应用程序,以o l e 自动化方式启动 a u t o c a d 软件在后台运行,实现应用程序中处理d w g 文件的功能。从a u t o c a dr 1 4 版本开始,a u t o d e s k 公司对a u t o c a d 本身加入了a c t i v e x 自动化服务功能( a c t i v e x a u t o m a t i o ns e r v e r c a p a b i l i t i e s ) ,使得用户可以通过可视化编程工具,如d e l p h i 、v i s u a l c + + 、v i s u a lb a s c i 、p o w e r b u i l d e r 等对a u t o c a d 进行系统开发,极大的提高了工作 效率。另一种是利用具有d w g 功能的a c t i v e x 组件,在v i s u a lc + 十等编程工具编制 的应用程序中直接将d w g 文件处理功能嵌入其中。 总的说来,独立开发的好处在于无须依赖任何a u t o c a d 软件以及与a u t o c a d 相 关的工具软件,这样不仅减少了开发成本,而且同样的算法设计与代码可以运用于以 后的类似的应用系统开发中,这可以为许多最终用户节省购买a u t o c a d 软件以及与 a u t o c a d 相关的工具软件的费用,但进行这种方式的开发一方面要求开发者有深厚 的计算机程序设计功底,另一方面对于大多数开发者来说,能力、时间、财力方面的 限制使其开发出来的产品很难在功能设计和使用上与商业化a u t o c a d 软件以及与 a u t o c a d 相关的工具软件相匹敌,而且在购买a u t o c a d 软件以及与a u t o c a d 相关 的工具软件上省下的钱可能还抵不上开发者在开发过程绞尽脑汁所花的代价,因此这 种开发方式仅为少数开发者使用。单纯二次开发由于是借助于a u t o c a d 软件提供的 a u t o l i s p 和a d s 语言进行的,省时省心,但用它们来开发应用程序仍不尽如人意, 效率低下,且在界面设计上相对单一,难以发挥开发者的想象力以及不同a u t o c a d 应用的需要。集成二次开发既可以充分利用可视化软件开发工具的高效方便的编程功 能,又可以充分利用a u t o c a d 软件处理d w g 文件的功能,集二者之所长,不仅能 大大提高应用系统的开发效率,而且使用面向对象的可视化软件开发工具开发出来的 应用程序具有良好的外观、完善的功能,且可靠性好、便于维护,尤其是使用具有 d w g 文件处理功能的a c t i v e x 控件进行集成开发更能表现出这些优势。 综上所述,集成二次开发正成为d w g 文件应用软件开发的主流方向。但是基于 a u t o c a da c t i v e xa u t o m a t i o n 对象的的集成二次开发仍然摆脱不了a u t o c a d ,这样 使得系统比较庞大,应用系统运行效率低。因此使用具有d w g 文件处理功能的 a c t i v e x 控件进行集成开发是理想的选择。但是,目前市场上有d w g 文件处理功能 的控件功能不大完善,还有待提高,价格比较昂贵。于是,对有d w g 文件处理功能 的控件的研究已成为c a d 研究中的热点,世界上有很多c a d 公司和组织机构在进 行d w g 文件处理方面的研究,其中最有代表的是o p e n d w g 协会。 1 3o p e n d w gt o o l k i t ( o d t ) 介绍 o p e n d w g 是一个协会的名称,由一些从事c a d 软件的公司和个人组成。o p e n d w g 协娥b - t - d w g 文件研究,并希望人们普遍接受的a u t o c a dd w g 图形文件成为不 d w g 文件离线浏览a c t i v e x 控件研究 同c a d 图形文件之间相互交换数据的开放的工业化标准,从而减少软件开发工作者 在底层开发的工作量,把主要精力放在产品级的软件开发工作上。但是d w g 文件的 格式是不公开的,所以d w g 文件内的数据对于用户和软件开发者都是不可见的,不 能直接对d w g 文件中的数据进行访问,显然这是d w g 文件成为不同c a d 图形文 件之间相互交换数据的开放的工业化标准的一大障碍,为此,o p e n d w g 协会在多 年研究的基础上开发了一个能直接访问d w g 内部数据的底层函数库,该库就叫 o p e n d w gt o o l k i t ( 以下简称o d t ) 。o d t 是一个静态连接,为直接操作d w g 和 d x f 文件提供了丰富的函数。这样,对于从事d w g 文件应用软件开发的工作者来 说,处理d w g 文件等底层操作可以通过调用o d t 中的函数解决,把主要精力放在 软件的上层应用开发上。 o d t 支持c 和c + + 语言,利用o d t 开发d w g 文件应用软件应当首先考虑这两 种程序开发语言。o d t 支持多种a u t o c a d 版本,并且随着a u t o c a d 版本升级而不 断升级,目前o d t 的版本是2 0 0 8 ,该版本支持a u t o c a d 2 0 0 0 下生成的d w g 文 件。o d t 支持以下平台: d e c a l p h an t b mr s 6 0 0 0a i xs u ns o l a r i s2 d e c a l p h au n i x l i n u xs u ns o l a r i sx 8 6 h p7 0 0s e r i e s ,h p u xm a c i n t o s hm i c r o s o f tw i n d o w s s i l i c o ng r a p h i c s o d t 是一个静态连接库,所有的函数以一个平面接口形式出现,o d t 中函数比较 繁多,使用很不方便,要利用o d t 处理d w g 文件,需要认真阅读其说明文档和编 程示例。o d t 是处理d w g 文件的底层工具包,各函数与d w g 文件的内容和结构紧 密相连,因此要熟练运用o d t 中的函数处理d w g 文件,还需分析d w g 文件结构, 对d w g 文件有一定的了解。因此,目前0 d t 也不能成为d w g 文件应用软件开发 的理想工具。 1 4 本文的研究内容 鉴于上面对d w g 文件应用软件开发方式、开发工具的讨论和分析,我们在香港 s r d 公司的资助下,设想开发一个组件式的a u t o c a d 软件,即在o d t 的基础上开 发一个商业化的,能浏览d w g 文件的a c t i v e x 控件( 后面简称为d w g 文件浏览器) 。 有了d w g 文件浏览器,用户可以在用d e l p h i 、v i s u a l c + + 、v i s u a lb a s c i 、p o w e r b u i l d e r 等可视化编程工具编制d w g 文件应用程序时调用它,摆脱a u t o c a d 平台的束缚, 直接将d w g 文件处理功能嵌入其中,大大提高软件开发效率。在o d t 的基础上开 发一个组件式的a u t o c a d 软件是一件复杂、艰巨、庞大的事情,a u t o c a d 发展到今 天已经有2 0 多年的历史,要在短暂的时间内完成a u t o d e s k 公司做了2 0 多年的事情 显然是不可能的。因此,本论文研究的内容只限于d w g 文件的浏览,即d w g 文件 数据的读取以及利用所读取的数据绘制矢量图形,显示d w g 文件。d w g 文件的写 6 南京航空航天大学硕士学位论文 操作和打印在本文中不做讨论。全文共7 章,各章内容简介如下: 第一章“绪论”概述了课题提出的背景,阐述了本文主要研究内容、研究手段、 研究目的以及研究的意义,最后对本文各章节进行了安排。 第二章“矢量图形软件开发基础”介绍了本课题所涉及的软件基础知识。 第三章“d w g 文件浏览a c t i v e x 控件开发方案概述”介绍了d w g 文件浏览 a c t i v e x 控件开发方案的选择、开发思路、开发亡具、软件总体设计。 第四章“图形数据的组织与d w g 文件的读取”在介绍0 d t 的基础上介绍d w g 文件的 读取以及系统图形数据的组织。 第五章“d w g 文件的显示”介绍了如何显示d w g 文件,即如何利用从d w g 文件 中所读得的数据绘制矢量图形。 第六章“转化为a c t i v e x 控件”介绍了基于文档视图结构的a c t i v e x 控件以及如何 将一个基于文档视图结构的应用程序转换为a c t i v e x 控件。 第七章“总结与展望”总结了全文有关的研究工作,就d w g 文件浏览a c t i v e x 控件的进一步研究提出了有关建议。 d w g 文件离线浏览a c t i v e x 控件研究 第二章矢量图形软件开发基础 本章将讲述开发d w g 文件浏览器所要用到的v c + + 基础知识,这主要包括m f c 以及w i n d o w s 图形图象处理等编程基础知识。 2 1m f c 简介 毋庸置疑,c + + 是当今世晃上应用最广范的编程语言,这一切主要得益于当年深 入人心的c 语言。w i n d o w s 平台下c + + 的编程工具,首推m i c r o s o f t 的v i s u a lc + + 。 但是,编写w i n d o w s 应用程序只熟悉c 抖的语法还是远远不够的,必须掌握m f c , 全称是m i c r o s o f tf u n d a m e n t a lc l a s s ,即微软基础类库。 标准的c + + 语言几乎没有附带任何库,仅仅提供了一些语言规则,开发者要么自 己编写出适宜的对象库,要么就用别人已经编好的,m f c 实际上就是一个第三方的 c + + 标准库。 一个完整的w i n d o w s 应用程序首先必须有用户界面、窗体、各种对话框、按钮、 菜单等,开发者可以通过调用w i n d o w s 的a p i 函数来实现这一切,但是a p i 采用的 是c 的标准,用它编写程序很多c + + 的特性,比如继承、封装等就无法发挥。m i c r o s o f t 也提供了c + + 库,它位于任何w i n d o w sa p i 之上,能够使开发者的工作更加高效 和轻松。它就是m i c r o s o f t 基本类库( m f c ) ,该库的主要优点是效率高。它减少了大 量在建立w i n d o w s 程序时必须编写的代码。同时它还提供了所有一般c + 十编程的 优点,因此m f c 具有良好的通用性和可移植性。 2 1 1m f c 的常用类 m f c 是很庞大的,4 o 版包含了大约2 0 0 个不同的类。利用它们,开发者可以完 成许多标准的w i n d o w s 编程任务;利用基本类库也可以在应用程序中加入许多复杂 的特性,如生成各种个性化的菜单栏、工具栏和状态栏,对各种数据库进行操作等等。 在设计思想上,m f c 将o o p 方法与事件驱动结合得很好。m f c 的类的确非常多, 但在一般的应用程序中不需要使用所有的函数。事实上,开发者可能只需要使用其中 的十多个m f c 中的类就可以建立一个漂亮的程序。该层次结构大约可分为几种不同 类的集合,下面结合d w g 文件浏览a c t i v e x 控件介绍m f c 中最常用的类。 2 1 2 文档类( d o c u m e n t ) 文档类为客户定义的文档提供了大量的操作,比如说o p e n ,c l o s e ,s a v e 等,文 档类主要是应用于文档数据的存储、调出以及修改文档数据,d w g 文件浏览a c t i v e x 控件就要仰仗这个文档类组织图形数据。文档类包括c d o c u m e n t 、c d o e l t e m 、 南京航空航天大学硕士学位论文 c d o c t e m p l a t e ,还有一些它们的子类,使用户能对文档数据进行查阅编辑和修改。 2 1 3 视图类( v i e w ) 视图类由c v i e w 以及它的子类组成,包含了常见的一些控件,比如c s c r o l l v i e w , c c t r l v i e w ,c e d i t v i e w ,c t r e e v i e w ,c l i s t v i e w 等。视图类的许多操作都是和文档相关 的,比如拖动滚动条时,实际上是看到文档或图像对应的部分。d w g 文件浏览a c t i v e x 控件仰仗这个视图类实现d w g 文件的显示。 2 1 4 框架窗口类( f r a m ea n dw i n d o w ) 顾名思义,框架窗口类就是为开发者提供创建应用程序窗体的方法,可以建立s d i 与m d i 窗体,s d i 指的是单文档界面( s i n g l e d o c u m e n ti n t e r f a c e ) ,就是同一时间只 能打开一个文档,m d i 则是多文档界面( m u l t i p l e d o c u m e n t i n t e r f a c e ) ,像a u t o c a d 2 0 0 0 就是典型的m d 界面。m f c 为它们准备了c f r a m e w n d 以及c m d i f r a m e w n d 、 c m d i c h i l d w n d 等几个类。 2 1 5 主要应用程序结构类 这一组类都由c m d t a r g e t 类派生而来,主要是c w i n t h r e a d 以及c w i n a p p 这两个 类,分别涵盖了线程和应用程序资源的相应操作。c w i n a p p 在建立应用程序时将会 用到,并且任何程序中都只能用一次。 2 1 6 文件服务类( f i l e ) 常用的就是c f i l e 类及其派生类,它们控制普通文件的i 0 操作,比如读写文件, 重命名及删除等。 2 1 7 绘图类及绘图对象类 包括c d c 与它的一些派生类,提供了诸如字体、颜色、画线、画圆、填充等绘 图操作。后砸详细介绍。 2 1 8 对话框类( d i a l o g ) 主要用于创建和操作各种各样的模态和非模态对话框;最常用的就是c d i a l o g 类。 此外m f c 还有异常处理,特殊结构( l i s t 、a r r a y 和m a p ) ,网络服务 ( w i n s o c k ) ,o l e 2 ,数据库( o d b c ,d a o ) 的一些专用类。 d w g 文件离线浏览a c t i v e x 控件研究 2 1 9m f c 的类库结构 以上讨论的m f c 成员类是按照m f c 类库的继承关系来分类的。可以发现,大 多数m f c 的类都有一个共同的基类c o b j e c t ,当然也有少数类是独立的,这就说明 m f c 并不是单根结构,m f c 主要是为c + + ,或者说是v c 而设计的,为了保持与c 语言的兼容性,c + + 不能成为纯粹的面向对象语言。c w n d 类汇集了w i n d o w s 中的 所有通用特性、对话框和控件。c f r a m e w n d 类是从c w n d 继承来的,并实现了标 准的框架应用程序。 2 2w i n d o w s 图形编程基础 2 2 1 图形设备接口g d i ( g r a p h i cd e v i c e i n t e r f a c e ) 图形设备接口g d i ( g r a p h i c d e v i c ei n t e r f a c e ) 是一个可执行程序,它接受w i n d o w s 应用程序的绘图请求( 表现为g d i 函数调用) ,并将它们传给相应的设备驱动程序, 完成特定于硬件的输出,象打印机输出和屏幕输出。g d i 负责w i n d o w s 的所有图形 输出,包括屏幕上输出像素、在打印机上输出硬拷贝以及绘制w i n d o w s 用户界面。 2 2 2 设备环境 设备环境是指包含了一个设备( 如显示器或打印机) 的图形绘制属性信息的 w i n d o w s 对象。所有的绘图调用都是通过设备环境对象完成。我们向设备环境文提出 屏幕输出的要求,然后由w i n d o w s 自己来调用具体的输出设备的驱动程序来完成 实际的输出工作。围绕设备环境,m f c 提供了一系列与其配合使用的绘图对象,这 其中包括画笔对象、刷子对象以及字体对象等等。它们的工作模型是这样的:首先对 设备环境对象( 我们简称为d c 对象) 进行设置,然后选择进行屏幕输出所需要的工具, 最后用d c 对象的输出函数绘制图形。屏幕输出的目标一般都是窗口的客户区,它是 一个万能的输出区域,可以接受无论是文本、位图、还是其他类型的数据( 比方说 0 l e 对象) 。 2 2 3m f c 中与g d i 有关的类 为了支持g d 绘图,m f c 提供了两种重要的类:设备环境类,用于设置绘图属性和绘制图 形;绘图对象类,封装了各种g d i 绘图对象,包括画笔、刷子、字体、位图、调色板和区域。编 写绘图程序需要用到设备环境类和绘图对象类。绘制图形先要创建设备环境。比如要在计算机屏 幕上绘图,必须先取得屏幕的d c ( 设备环境) 。这好比画家想画画,必须有一张白纸。绘图对象 类就好比画家的绘画工具。 南京航空航天大学硕士学位论文 2 2 3 。1 设备环境类 设备环境类包括c d c 和它的派生类c c l i e n t d c 、c p a i n t d c 、c w i n d o w d c 、 c m e t a f i l e d c 。 c d c 是设备环境类的基类,除了一般的窗口显示外,还用于基于桌面的全屏幕绘 制和非屏幕显示的打印机输出。c d c 类封装了所有图形输出函数,包括矢量、光栅 和文本输出。常用成员如下: mh d cc d c 对象使用的输出设备环境。 mh a t t r b d c c d c 对象使用的属性设备环境。 c d c 为类的构造函数,用于构造一个c d c 对象。 c r e a t e d c 为指定的设备创建一个设备环境。 p a t b l t 创建一个位模式。 b i t b r 从指定的设备环境中复制位图。 s t r e t c h b t t 从矩形资源中将一位图送到指定的目标矩形区,为适合目标矩形区的 大小将压缩和扩大位图。 t c x t o u t 在指定区域用当前选定字体输出字符串。 s e l e c t o b e j c t 选择一个g d i 绘图对象,如画笔。 c r e a t e c o m p a t i b l e d c 创建一个与另个设备相容的内存设备,用户可以使用它在 内存中准备图像。 c c l i e n t d c ( 客户区设备环境文) 用于客户区的输出,它在构造函数中封装了 g e t d c 0 ,在析构函数中封装了r e l e a s e d c 0 函数。一般在响应非窗口重画消息( 如键 盘输入时绘制文本、鼠标绘图) 绘图时要用到它。 c p a i n t d c 用于响应窗口重绘消息( w mp a i n t ) 时的绘图输出。c p a i m d c 在构 造函数中调用b e g i n p a i n t 0 取得设备环境,在析构函数中调用e n d p a i n t 0 释放设备环 境。e n d p a i n t 0 除了释放设备环境外,还负责从消息队列中清除w mp a i n t 消息。因 此,在处理窗口重画时,必须使用c p a i n t d c ,否则w mp a i n t 消息无法从消息队列 中清除,将引起不断的窗口重画。c p a i n c d c 也只能用在w mp a i n t 消息处理之中。 c w i n d o w d c 用于窗口客户区和非客户区( 包括窗口边框、标题栏、控制按钮等) 的绘制。除非要自己绘制窗口边框和按钮( 如一些c d 播放程序等) ,否则般不用 它。 c m e t a f i e d c 专门用于图元文件的绘制。图元文件记录一组g d ! 命令,可以通过这一组g d i 命令重建图形输出。使用c m e t a f i l e d c 时,所有的图形输出命令会自动记录到一个与c m e t a f i l e d c 相关的图元文件中。 2 2 3 2 图形对象类 图形对象类包括c g d i o b j e c t 、画笔、刷子、字体、位图、调色板、区域等。c g d i o b j e c t l l d w g 文件离线浏览a c t i v e x 控件研究 是图形对象类的基类,但该类不能直接为应用程序所使用。要使用g d i 对象,必须 使用它的派生类:画笔、刷子、字体、位图、区域等等。使用图形对象要注意两点: 1 同其他m f c 对象一样,g d i 对象的创建也要分为两步:第一步,是定义一个 g d i 绘图对象类的实例;第二步调用该对象的创建方法,真正创建对象。 2 创建对象:使用该对象,首先要调用c d c :s e l e c t o b j e c t ( ) 将它选入到设备环境 文中,同时保存原来的设置到一个g d i 对象指针比如说p o l d o b j e c t 中。在使用 完后,再用s e l e c t o b j e c t ( p o l d o b j e c t ) 恢复原来的设置。但是,如果该设备环境 是用户自己创建的,则不必恢复原来设置,因为框架会在该设备环境生存期结 束时删除该设备环境,同时也就删除了原来存放于该设备环境中的绘图对象设 置。 下面介绍各种对象的用法: 画笔( c p e n ) :封装g d i 画笔,可用作设备环境的当前画笔。画笔用于绘制对象的 边框以及直线和曲线。缺省画笔画一条与一个像素等宽的黑色实线。 刷子( c b r u s h ) :封装g d i 刷子,可用作设备环境的当前刷子。刷子用来填充一个 封闭图形对象( 如矩形、椭圆) 的内部区域。缺省的刷子将封闭图形的内部填充成全 白色。我们以前所创建的窗口内部都是白色就是窗口使用缺省刷子填充的结果。可以 用以下几种方法创建刷子: ( 1 ) c r e a t e s o l i d b m s h ( d w o r dc r c o l o r ) 仓r j 建一个实心刷子,用一种颜色填充一个内 部区域。 ( 2 ) c r e a t e h a t c h b r u s h ( i n tn l n d e x ,d w o r dc r c o l o r ) ;创建一个带阴影的刷子,n i n d e x 代表一种影线模式。 ( 3 ) 用c r e a t e p a t t e m b r u s h ( c b i t m a p * p b i t m a p ) 用一个位图作刷子,一般采用8 x 8 的位图,因为刷子可以看作8 x 8 的小位图。当 w i n d o w s 桌面背景采用图案( 如w e a v e ) 填充时,使用的就是这种位图刷子。 ( 4 ) 同样可以使用s e l e c t s t o c k o b j e c t ( ) 从库存刷子中选取一个: b l a c kb r u s h 黑色刷子w h i t eb r u s h 白色刷子d k g r a y _ b r u s h 暗灰刷子 g r a y b r u s h 灰色刷子l t g r a y b r u s h 淡灰色刷子n u l l _ b r u s h 空刷子 字体( c f o n t ) :封装了g d i 字体对象,用户可以建立一种g d i 字体,并使用c f o n t 的成员函数来访问它。 位图( c b i t m a p ) :封装g d i 位图,它提供成员函数装载和操作位图。 调色板( c p a l e t t e ) :封装g d i 调色板,它保存着系统可用的色彩信息,是应用程序 和彩色输出设备环境的接口。 区域c r g n 类:封装g d i 区域。区域是窗口内的一块多边形或椭圆形的区域。c r g n 用于设备环境( 通常是窗口) 内的区域操作。c r g n 通常与c d c 的有关剪裁( c l i p p i n g ) 的成员函数配合使用。 常见的绘图任务 南京航空航天大学硕士学位论文 输出文本 字体大小计算:通过调用g e t t e x t m e t r i c s 0 返回当前使用字体的尺寸描述。 字体颜色设置: 设置前景色:c d c :s e t t e x t c o l o r ( i n tn c o l o r ) : 设置背景色:c d c :s e t b k c o l o “i n tn c o l o r ) : 文字输出: 除了我们前面介绍的文本输出函数t e x t o u t 0 之外,还有其他几个函数可用于文本 输出: t a b b e d t e x t o u t :象t e x t o u t 一样显示正文,但用指定的制表间隔扩充制表键t a b 。 在前面的文本编辑器中,当输入一个t a b 时,t e x t o u t 在屏幕上输出个黑色方块。 e x t t e x t o u t :在指定的矩形中显示正文。可以用该函数删去超出矩形的正文,用 正文背景填充矩形,调整字符间隔。 d r a w t e x t :在指定矩形中显示正文,可以用这个函数扩展制表键t a b 。在格式化 矩形时调整正文左对齐、右对齐或居中;还可以在一个词中断开以适应矩形边界。 画点s e t p i x e l 在指定坐标处按指定色彩画一点。 画线m o v e t o e x 将直线起点移动到指定坐标处,l i n e t o 从起点开始画直线到终 点处。使用的线型由当前所用画笔指定。 画弧a r c ( i n tx l ,i n ty l ,i n tx 2 ,i n ty 2 ,i n tx 3 ,i n ty 3 ,i n tx 4 ,i n ty 4 ) ,各参数几何意义如图 2 1 所示。 ( x 1 ,y 1 )( x 4 ,y 4 ) 氐( x 3 ,y 3 ) ( x 2 ,y 2 ) 图2 - l 弧线的坐标定位 封闭图形矩形调用函数r e c t a n g l e 。圆角矩形调用函数r o u n d r e c t 。函数e l l i p s e 在一个矩形内画椭圆。函数c h o r d 画弦。函数p i e 画饼形图。函数p o l y g o n 画封闭的 多边形。函数p o l y p o l y g o n 画完整的一组多边形。 2 2 3 3m f c 的绘图原理 图形的绘制过程是:首先创建设备环境对象并设置其输出属性,然后选择绘图工 具,最后调用c d c 对象的函数绘图。在w i n d o w s 当中,每次窗口的外观发生改变 的时候都会发出一个w mp a i n t 消息,窗口的重绘工作都是在响应这个消息的处理 函数当中进行的。在程序中调用c w n d 的u p d a t e w i n d o w 和r e d r a w w i n d o w 数的时 候都也会触发重绘事件。还可以直接使用s e n d m e s s a g e 函数向一个指定的窗口送出重 d w o 文件离线浏览a c t i v e x 控件研究 绘消息。另外调用c w n d 的i n v a l i d a t e 函数可以指示重绘的时候是否需要擦去背景, 如果使用i n v a l i d a t e r e c t 函数还可以设置客户区的无效区域,系统重绘的时候将只把 该区域的内容重新绘制。 2 3 坐标映射 w i n d o w s 图形设备接口提供了坐标转换和按比例缩放功能,这为图形提供设备无 关性非常重要。没有这个功能,一个程序必须考滤每种设备的分辨率( 比如以前在 t u r b oc 下作图) 。w i n d o w s 为了实现这个功能,在图形设备接口中引入了一些全新 的概念,比如:设备( d e v i c e ) 坐标和逻辑( 1 0 9 i c a l ) 坐标:窗口( 、v i n d o 、v p o r t ) 和视
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工程法规考试中的案例思考试题及答案
- 央企员工考试试题及答案
- 城市患者测试题及答案
- 大班分合测试题及答案
- 单位开放性试题及答案
- 传媒策划试题及答案
- 灯具考试题及答案
- 以财务管理助力职业发展计划
- 完善企业应急预案和安全培训的具体措施计划
- 画家的新年个人工作计划
- 武装部文职试题及答案
- 狼人杀测试题及答案
- 2025-2030中国艾草行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 抱负与使命主题范文引领-2024-2025学年高一语文单元写作深度指导(统编版必修下册)
- 深度学习基础与实践 课件 2.3.2模型的欠拟合与过拟合
- 山东省济南长清区六校联考2025年初三下学期5月模拟考试生物试题试卷含解析
- 2025统编版(2024)小学道德与法治一年级下册《第13课-快乐儿童节》教学设计
- 2024年成都市城市管理委员会所属事业单位招聘真题
- 警犬培训授课课件
- 生活生命安全试题及答案
- 语文-华大新高考联盟2025届高三3月教学质量测评试题+答案
评论
0/150
提交评论