欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于VC++的图形实现-简单的图形编辑程序Word格式.docx

    • 资源ID:1116533       资源大小:108.48KB        全文页数:39页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于VC++的图形实现-简单的图形编辑程序Word格式.docx

    1、3.2 基本图元算法93.2.1 直线类93.2.2 方形类93.2.3 圆形类103.2.4 B 曲线类113.2.5 多边形类11第四章 系统详细设计124.1 界面设计124.2 存储结构设计12第五章 系统测试135.1 测试原则135.1.1 8020 原则135.1.2 全程测试145.1.3 测试具有免疫性145.2 模块测试结果145.2.1 画图测试145.2.2 缩放选择测试15第六章 结论15参考文献16致谢16第一章 绪论1.1 项目背景1950 年,第一台图形示器作为美国麻省理工学院旋风 l 号)计算机的附件诞生了。在整个 50 年代,只有电子管计算机,用机器语言编程

    2、,主要应用于科学计算,为这些计算机配置的图形设备仅具有输出功能。计算机图形学处于准备和酝酿时期,开称之为:“被动式”图形学。到 50 年代朱期,MIT 的林肯实验室在“旋风”计算机上开发 SAGE 空中防御体系,操作者可以用笔在屏幕上指出被确定的目标。它预示着文瓦式计算机图形学的诞生。l962 年,MIT 林肯实验室的 IvailESutherland 发表了 1 篇题为“Sketchpad:一个人机交 通信的图形系统”的博士论文,他在论文中首次使用了计算机图形学“ComputerGraphics”这个术语,证明交互计算机图形学是一个可行的、有用的研究领域,从而确定交互计算机图形学作为一个崭新

    3、的科学分支的独地位。同在 60 年代早期,法国雷诺汽车公司的工程师 Pierre Bezier 发展了 1 套傲后人称为 Bezier 曲线、曲面的理论,成功地用于几何外形设计,并开发了用于汽车外形设计的 UNISUI F 系统。2O 世纪 7O 年代,计算机图形学另外两个重要进展是真实感图形学和实体造型技术的产生。另外,从 1973 年开始, 相继出现了英国剑桥大学 CAD 小组的 Build 系统、美国罗彻斯特大学的 PADI T 系统等实体造 系统。1980 年 Whitted 提出了一个光透视模型whitted 模型,并第一次给出光线跟踪算法的范例,实现 whjtted 模型;1984

    4、 年,美国 Corne大学和日本广 岛大学的学者分别将热辐射工程中的辐射度的方法引入到计算机图形学中,用辐射度方法成功地模拟,理想漫反射表面问的多重漫反射效果;光线跟踪算法和辐射度算法的提出,标志着真实感图形的显示算法已逐渐成熟。从 20 世纪 80 年代中期以来,超大规模集成电路的发展,为图形学的飞速发展奠定了物质基础。计算机的运算能力的提高,图形处理速度的加快,使得图形学的各个研究方向得到充分发展,图形学已广泛应用于动画、科学计算可视化、CADCAM、影视娱乐等各个领域。1.2 目的和意义本系统设计的目的就是要设计一个系统软件,实现基本的图形作图,并且实现对图元函数的操作主要是选择和缩放功

    5、能。通过本系统的实现,力求使得做出比画图程序功能更加强大。1.3 系统设计思想一个方便用户使用的软件应该具备软件体积小,操作界面友好,基本功能稳定,运行速度较快,通过计算机技术及网络技术结合开发出客户端与服务器端,以便方便快捷清晰的进行数据传输,和简易通讯功能。实用性:系统以用户需求为目标,以方便用户为原则。根据用户实际的需求情况,度身订造一套先进的局域网数据传输,从用户角度出发尽可能的方便用户使用,满足基本的用户需要,成为公司学校等通用的软件。先进性:本设计将充分应用现有成熟的计算机技术、网络技术、软件开发技术。以VC6.0 为主要开发环境,其优秀的编码体制和强大的编译器是此系统的强力支柱。

    6、高可靠性:一个实用的系统同时必须是可靠的,本设计通过合理而先进的网络设计以及软、硬件的优化选型,可保证系统数据传输的正确性。高安全性:在设计中,将充分利用网络软、硬件提供的各种安全措施,既可以保证用户共享资源,同时也可保证关键数据的安全性。采用标准技术:本系统的所有设计遵循国际上现行的标准进行,以提高系统的开放性。可维护性:系统的设计要求方便维护,包括硬件的维护,软件的维护(更改,升级等)和网络的维护。可扩展性及灵活性:系统的设计以方便未来业务的扩展和系统扩充为目标,系统要求能够方便的升级,充分保护系统的投资。第二章 系统原理和开发工具2.1 VC+概述Visual C+是当今最被广泛使用的可

    7、视化编程环境,为我们提供了一种方便、快捷的Windows 应用程序开发工具。它使用了 Microsoft Windows 图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-OrientedLanguage)、当今世界上最快的编辑器、最为领先的数据库技术。Visual C+ 6.0 是 VisualC+系列的最新版本,是为 Windows 98 或 Windows 2000 等 32 位操作系统开发应用程序用的编程工具,功能强大,界面友好,操作方便。与 Visual C+系列以前的版本相比而言,VC6.0 提供了许多新的特性,大致可以分为以下几方面

    8、。2.1.1 编辑器方面的新特性VC6.0 在集成开发环境的编辑器做了一些改进,以方便用户快速准确地编辑代码和资源, 这些新特性主要包括: 1)自动完成语句功能:在用户编辑代码时,编辑器根据光标当前位置判断作用的类或对象, 在一个下拉列表中显示相应的内容,如类的成员、函数原型、标识符定义等等。自动完成语句功能减轻了用户在输入长的类名或成员对象名时的繁琐工作,方便了用户的使用。2) 快速宏录制:用户可以将集成开发环境中特定的连续操作定义为宏,在需要再次使用类似操作的时候只需调用已录制好的宏即可。3) 支持 IE5 新控件的资源编辑器:新版本的资源编辑器支持 IE5 提供的四种新控件,在资源编辑器

    9、中可以方便地将这些新控件添加到工具栏或者对话框中。2.1.2 、编译器、连接器和调试器方面的改进VC6.0在集成开发环境的编译器、连接器和调试器方面也做了大的改进,其目的就是使得用户的应用程序运行起来更快、更稳定,调试起来更方便。1) 编译器方面的改进:包括新添加的“_assume”关键字、增强对内联函数的控制、新增并更新了警告、加强了运行时刻的错误检测等内容。 2)连接器方面的改进:包括延迟加载外部支持、增添了新的连接选项和修正了外部函数的接口以减小文件尺寸等内容。 3)调试器方面的改进:包括改善了反汇编输出、改善了指针对象的显示、支持进程中的远程过程调用等内容。2.2 windows 绘图

    10、概述Windows 应用程序绘制图形时使用的是一种逻辑单位,每个逻辑单位的大小由映射模式决定, 这个逻辑单位既可以与设备单位(屏幕或打印机上的一个像素点)相同,也可以是一种物理单 位(如毫米),还可以是用户自定义的一种单位。在 Windows 应用程序中,只要与输出有关系,都 要使用映射模式。当 Windows 应用程序在其客户区绘制图形时,必须给出在客户区的位置,其位置用 x 和 y 两个坐标表示,x 表示横坐标,y 表示纵坐标。在所有的 GDI 绘制函数中,这些坐标使用的是一种逻辑单位。当 GDI 函数将输出送到某个物理设备上时,Windows 将逻辑坐标转换成设备坐标(如屏幕或打印机的像

    11、素点)。逻辑坐标和设备坐标的转换是由映射模式决定的。映射模式被储存在设备环境中。GetMapMode 函数用于从设备环境得到当前的映射模 式,SetMapMode 函数用于设置设备环境的映射模式。1. 逻辑坐标逻辑坐标是独立于设备的,它与设备点的大小无关。使用逻辑单位,是实现所见即所得的基础。当程序员在调用一个画线的 GDI 函数 LineTo,画出 25.4mm(1 英寸) 长的线时,他并不需要考虑输出的是何种设备。若设备是 VGA 显示器,Windows 自动将其转化为 96 个像素点;若设备是一个 300dpi 的激光打印机,Windows 自动将其转化为 300 个像素点。2. 设备坐

    12、标Windows 将 GDI 函数中指定的逻辑坐标映射为设备坐标,在所有的设备坐标系统中, 单位以像素点为准,水平值从左到右增大,垂直值从上到下增大。Windows 中包括以下 3 种设备坐标,以满足各种不同需要:(1) 客户区域坐标,包括应用程序的客户区域,客户区域的左上角为(0,0)。(2) 屏幕坐标,包括整个屏幕,屏幕的左上角为(0,0)。屏幕坐标用在 WM_MOVE 消息中(对于非子窗口)以及下面的 Windows 函数中:CreateWindow 和 MoveWindow(都对于非子窗口)、GetMessage、GetCursorPos、GetWindowRect、WindowFro

    13、mPoint 和 SetBrushOrg 中。用函数 ClientToScreen 和 ScreenToClient 可以将客户区域坐标转换成屏幕区域坐标,或反之。(3) 全窗口坐标,包括一个程序的整个窗口,包括标题条、菜单、滚动条和窗口框,窗口的左上角为(0,0)。使用 GetWindowDC 得到的窗口设备环境,可以将逻辑单位转换成窗口坐标。3. 逻辑坐标与设备坐标的转换方式映射方式定义了 Windows 如何将 GDI 函数中指定的逻辑坐标映射为设备坐标。要继续讨论映射方式我们要介绍 Windows 有关映射模式的一些术语:我们将逻辑坐标所在的坐标系称为窗口,将设备坐标所在的坐标系称为视

    14、口依赖于逻辑坐标,可以是像素点、毫米或程序员想要的其他尺度。依赖于设备坐标(像素点)。通常,视口和客户区域等同。但是,如果程序员用GetWindowDC 或 CreateDC 获取了一个设备环境,则视口也可以指全窗口坐标或屏幕坐标。点(0,0)是客户区域的左上角。x 的值向右增加,y 的值向上增加。对于所有映射模式,Windows 都用下面两个公式将窗口坐标转换成视口坐标: xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+yViewOrg

    15、其中,(xWindow,yWindows)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备点。如果设备坐标是客户区域坐标或全窗口坐标,则 Windows 在画一个对象前,还必须将这些坐标转换成屏幕坐标。这两个公式使用了分别指定窗口和视口原点的点:(xWinOrg,yWinOrg)是逻辑坐标的窗口原点;(xViewOrg,yViewOrg)是设备坐标的视口原点。在缺省的设备环境中,这两个点均设置为(0,0),但它们可以改变。此公式意味着,逻辑点(xWinOrg,yWinOrg)总被映射为设备点(xViewOrg,yViewOrg)。Windows 还能将视口(设备)坐标

    16、转换为窗口(逻辑)坐标: xWindow=(xViewport-xViewOrg)*(xWinExt/xViewExt)+xWinOrg yWindow=(yViewport-yViewOrg)*(yWinExt/yViewExt)+yWinOrg可以使用 Windows 提供的两个函数 DPtoLP 和 LPtoDP 在设备坐标及逻辑坐标之间互相转换。实际应用中,遇到一些与显示模式有关的问题。例如 OLEServer 中映射模式 的设置、如何减少逻辑坐标与设备坐标间相互转换的误差等。下面,笔者就讨论一下这两个 问题的解决方法。1.映射模式的设置方法开发应用程序时,如果直接调用 SetMapM

    17、ode 函数将映射模式设置成度量映射方式中的一种后,在 Windows95/98 上程序会正常运行,但在 WindowsNT 上对象显示的大小比边框小。经过研究后,发现 WindowsNT 上使用基于逻辑英寸的映射方式。在讨论如何设置基于逻辑英寸的映射方式前,我们先介绍一下逻辑英寸的概念。Windows 在显示时以逻辑英寸为单位,逻辑英寸比实际的英寸要大。如果 Windows 程序使用实际英寸,则普通的 10 磅文本在显示器上就会小到几乎难以辨认,因此 Windows 使用放大了的来表示文本。逻辑英寸只影响显示,而不影响打印。使用 GetDeviceCaps 函数可得到当前设备的各种能力,其第

    18、一个参数 nIndex 指示要获取信息的类型。当 nIndex 为 HORZSIZE 和 VERTSIZE 时,可得到显示区域的宽度和高度;当nIndex 为 HORZRES 和 VERTRES 时,可得到每个水平和垂直方向的像素数即分辨率;nIndex 的值为 LOGPIXELSX和 LOGPIXELSY 时,可得到水平和垂直方向每逻辑英寸所含像素数。在介绍了逻辑英寸的知识以后,很容易将 OLEServer 设置为基于逻辑英寸的映射模式。如果程序员仅仅调用 SetMapMode(hdc,MM_LOENGLISH)来设置映射模式,当前的映射模式为物理英寸,而不是逻辑英寸。设置逻辑英寸必须自定义

    19、窗口和视口的范围,使xViewExt/xWinExt=0.01 逻辑英寸中水平像素的点数,当xViewExt=LOGPIXELSX,xWinExt=100 时,其比值正好满足上述要求。以下是设置映射模式的代码。intxLogPixPerInch=GetDeviceCaps(hdc,LOGPIXELSX); intyLogPixPerInch=GetDeviceCaps(hdc,LOGPIXELSY); SetMapMode(MM_ANISOTROPIC);SetWindowExt(100,100); SetViewportExt(xLogPixPerInch,yLogPixPerInch);上

    20、述代码中调用 SetMapMode 函数将映射模式设置为自定义的,该调用必须位于SetWindowExt 和 SetViewportExt 调用之前,否则设置将会无效。上述代码实际上将映射模式设置成逻辑 MM_LOENGLISH,若程序员需要设置逻辑MM_LOMETRIC、MM_HIMETRIC、MM_HIENGLISH 或 MM_TWIPS,只需修改上述代码中的 SetWindowExt 的参数,该参数实际上是每英寸所包含的各种映射模式下的单位数。根据表中各映射模式的参数,可得到表中每英寸所对应的各逻辑单位的个数。例如,要设置逻辑 MM_TWIPS,函数 SetWindowExt 中的参数为

    21、应 1440。当我们将映射模式设置成基于逻辑英寸的 MM_LOMETRIC 时,窗口的范围设为 256, 视口的范围设为 96(在 VGA 显示器下 LOGPIXELSX 的值),约 2.6 个逻辑单位对应 1 个像素,这显然会造成不小的误差,它会表现在应用程序的各个方面:客户区的一个部分没有被刷新;对象之间本来没有间距,却显示出有间距;对象在屏幕的不同位置上会缩小或增大一个像素等问题。可以采取以下两个步骤避免转换误差。(1)尽量选择窗口范围和视口范围比可以整除的映射方式,例如基于逻辑英寸的 MM_TWIPS 其窗口范围和视口范围比 1440/96,可简化为15/1,从设备坐标转化为逻辑坐标时

    22、没有误差,从消除误差角度看,MM_TWIPS 比其他几个映射模式都要好。(2)窗口范围和视口范围比不能整除时,也尽量将其简化,例如,当采用 0.3900mm 中的将 1 个逻辑单位映射成 1/64 英寸的映射方式时,其窗口范围和视口范围比值为 64/96,可简化为 2/3。如果我们将逻辑单位的值都取为 2 的倍数,设备单位的值都取为 3 的倍数,转换后就没有精度的丢失了。综上所述,如果我们能够根据映射模式值的特点,逻辑坐标和设备坐标都取经简化的窗口和视口范围值的倍数,则逻辑坐标和设备坐标间的转化将没有误差第三章 系统算法设计3.1 软件结构设计MFC框架中最容易被程序员和用户两者都见到的部分就

    23、是文档和视图。你在利用应用框架编写程序时的大部分工作是编写你的视图类和文档类。因此,我们有必要详细了解文档/视图结构。文档/视图结构是基于 MFC 库的应用的一个重要特性。它将的实质就是将数据本身与用户对数据的观察和操作分离开来。所有的数据变化都在文档类中进行管理, 同时它为视图对它的访问提供一个接口。视图调用两者间的接口来响应用户的操作,进行数据的修改,并且不断更新对文档的显示。这样就允许对同一数据可以有多个视图。本软件使用文档视图结构,采用多文档的结构方式。3.2 基本图元算法3.2.1 直线类直线类的继承结构如图:CObject-CUnit-CDline,直线类名为:CDline,主要结

    24、构如下:class CDLine:public CUnitpublic:virtual void OnMouseMove(CDC*pDC,CEastDrawView*pView,CPoint point); virtual void OnLButtonDown(CDC *pDC, CEastDrawView *pView, CPoint point); virtual void DrawActive(CDC *pDC,CPoint point);virtual BOOL IsInRgn(CPoint point); virtual void ShowSelectPoint(CDC*pDC);v

    25、irtual void Circumrotate(CPoint first,CPoint second); virtual int IsOnMarginPoint(CPoint point);virtual void Initial(); virtual CRgn* GetRgn(); CDLine();virtual void DrawStatic(CDC*pDC); DECLARE_SERIAL(CDLine);主要画图的算法如下:CPen m_pen; m_pen.CreatePen(m_PenStyle,m_PenWidth,m_PenColor); CPen* pen=(CPen*)

    26、pDC-SelectObject(&m_pen);COLORREF OldColor=pDC-SetBkColor(m_BackgroundColor); int OldBkMode=pDC-SetBkMode(m_BkMode);pDC-MoveTo(m_FirstPoint); pDC-LineTo(m_SecondPoint);SelectObject(pen);3.2.2 方形类class CRectangle:virtual void ShowSelectPoint(CDC *pDC); virtual BOOL IsInRgn(CPoint point); CRectangle()

    27、;virtual void Serialize(CArchive &ar); DECLARE_SERIAL(CRectangle)画图算法如下:CBrush m_brush;m_pen.CreatePen(m_PenStyle,m_PenWidth,m_PenColor); LOGBRUSH brushlog;brushlog.lbColor=m_BrushColor; brushlog.lbHatch=m_BrushHatch; brushlog.lbStyle=m_BrushStyle;m_brush.CreateBrushIndirect(&brushlog); SetBrushOrg(pDC,&m_brush);CBrush*brush=(CBrush*)pDC-int OldBkMode=pDC-Rectangle(CRect(m_FirstPoint,m_SecondPoint);SelectObject(brush);SetBkMode(OldBkMode);SetBkColor(OldColor);3.2.3 圆形类class CRound:public CUni


    注意事项

    本文(基于VC++的图形实现-简单的图形编辑程序Word格式.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开