1、南昌航空大学科技学院学士学位论文1毕业设计(论文)题目基于C多机联合绘图软件的实现系别信息工程系专业名称电子信息工程班级学号学生姓名指导教师二O一三年五月南昌航空大学科技学院学士学位论文2学士学位论文原创性声明本人声明,所呈交的论文是本人在导师的指导下独立完成的研究成果。除了文中特别加以标注引用的内容外,本论文不包含法律意义上已属于他人的任何形式的研究成果,也不包含本人已用于其他学位申请的论文或成果。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式表明。本人完全意识到本声明的法律后果由本人承担。作者签名日期2013年5月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用
2、学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权南昌航空大学科技学院可以将本论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。作者签名日期2013年5月日导师签名日期2013年5月日南昌航空大学科技学院学士学位论文3基于C多机联合绘图软件的实现学生姓名班级0982052指导老师摘要随着计算机技术的发展和人们的需求,越来越多的人们选择计算机绘图软件,了解传统的绘图软件的起源、现状和发展趋势。再对现有的传统的绘图软件进行分析比较的基础上,提出了基于局域网的绘图软件的功能需求,多机联合绘图系统
3、印证了这一需求,接下来讨论了基于局域网绘图软件的开发过程,着重分析了多机联合制图通信技术,并给出了详细的实现方法。最后对本次绘图系统开发进行总结。随着计算机性能的提高和计算机视觉理论及技术的发展,这种技术必将日趋成熟。网络技术是计算机技术和通信技术相互渗透而又紧密结合的产物。计算机绘图技术作为计算机应用的一个重要方面。本次毕业设计的多机联合绘图系统分为类的设计和联机操作两大部分。其中类的设计主要是由绘图对象类设计和工具类设计,用MICROSOFTVISUALSTUDIO2008开发工具软件编程来实现每一个部分,最后实现多机联合绘图软件,多台计算机联合制图。关键词多机联合、图像处理、MICROS
4、OFTVISUALSTUDIO2008指导老师签名南昌航空大学科技学院学士学位论文4BASEDONTHECIMPLEMENTATIONOFMULTIJOINTDRAWINGSOFTWARESTUDENTNAMECAIXIANGCLASS0982052SUPERVISORFANGFANGABSTRACTWITHTHEDEVELOPMENTOFCOMPUTERTECHNOLOGYANDPEOPLESNEEDS,ANINCREASINGNUMBEROFPEOPLECHOOSECOMPUTERDRAWINGSOFTWARE,LEARNTRADITIONALORIGINS,CURRENTSITUATIO
5、NANDDEVELOPMENTTRENDOFDRAWINGDRAWINGONEXISTINGLEGACYSOFTWAREBASEDONACOMPARISONOFPROPOSEDFUNCTIONALREQUIREMENTSBASEDONLOCALAREANETWORKDRAWING,CONFIRMSTHISNEEDJOINTDRAWINGSYSTEM,LANMAPPINGSOFTWAREWEREDISCUSSEDTHROUGHOUTTHERESTOFTHEDEVELOPMENTPROCESS,FOCUSEDONANUMBEROFJOINTCARTOGRAPHICCOMMUNICATIONTECH
6、NIQUES,ANDGIVESDETAILEDIMPLEMENTATIONMETHODSFINALSUMMARYOFTHISMAPPINGSYSTEMDEVELOPEDBYASCOMPUTERPERFORMANCEINCREASEANDDEVELOPMENTOFTHEORYANDTECHNOLOGYOFCOMPUTERVISION,THETECHNOLOGYWILLMATURENETWORKTECHNOLOGYISTHEMUTUALPENETRATIONOFCOMPUTERTECHNOLOGYANDCOMMUNICATIONTECHNOLOGYANDSEAMLESSINTEGRATIONOFP
7、RODUCTSCOMPUTERGRAPHICSTECHNOLOGYASANIMPORTANTASPECTOFCOMPUTERAPPLICATIONSTHISMULTICOMBINEDGRADUATIONDESIGNCLASSDESIGN,ANDONLINEMAPPINGSYSTEMDIVIDEDINTOTWOPARTSWHERETHECLASSDESIGNWASDESIGNEDBYDRAWINGOBJECTCLASSESANDTOOLSTODESIGN,PROGRAMMINGWITHMICROSOFTVISUALSTUDIO2008SOFTWAREDEVELOPMENTTOOLSTOIMPLE
8、MENTEVERYPART,FINALLYACHIEVINGACOMBINEDDRAWINGSOFTWARE,MULTIPLECOMPUTERMERGERSYSTEMMAPKEYWORDCOMBINEDMACHINEIMAGEPROCESSINGMICROSOFTVISUALSTUDIO2008SIGNATUREOFSUPERVISOR南昌航空大学科技学院学士学位论文5目录前言1第一章需求分析错误未定义书签。11应用现状调查错误未定义书签。12系统功能调查213系统目标3第二章概要设计错误未定义书签。21系统分析422MICROSOFTVISUALSTUDIO2008开发工具简介423架构设计
9、4231绘图对象类设计4232工具类设计5233其他类设计624主机和附机6第三章系统详细设计731初始模块732绘图模块设计8321矩形的绘制9322曲线的绘制14323直线的绘制17324文字的绘制19325绘制任意大小的图像2433联机操作错误未定义书签。331主机与附机的连接错误未定义书签。332主机与附机联合绘图2734其他功能的实现28341编辑功能28342导出图像29343图像的打印和预览29第四章系统调试3241系统调试及测试过程3242系统测试结果分析32南昌航空大学科技学院学士学位论文6第五章结论34参考文献35致谢36附录37南昌航空大学科技学院学士学位论文7前言当今信
10、息社会以多媒体为代表的信息技术产业的发展和应用对人类社会的影响和作用愈来愈明显,愈来愈强,也就是说,图形图像技术的飞速发展也是必然趋势,掌握图形图像处理技术对现代人来说也是很必要的。随着计算机技术的发展和人们的需求,越来越多的人们选择计算机绘图软件,了解传统的绘图软件的起源、现状和发展趋势;在对现有的传统的绘图软件进行分析比较的基础上,提出了基于局域网的绘图软件的功能需求,接下来讨论了基于局域网绘图软件的开发过程,着重分析了多机联合制图通信技术,并给出了详细的实现方法。最后对本次绘图系统开发进行总结。随着计算机性能的提高和计算机视觉理论及技术的发展,这种技术必将日趋成熟。本次毕业设计的多机联合
11、绘图系统分为类的设计和联机操作两大部分。其中类的设计主要是由绘图对象类设计和工具类设计,用MICROSOFTVISUALSTUDIO2008开发工具软件编程来实现每一个部分,最后实现多机联合绘图软件,多台计算机联合制图。南昌航空大学科技学院学士学位论文8第一章需求分析11应用现状调查目前,大多数绘图系统都是单体运行的,而多机联合绘图系统可实现多台计算机同时对图形图像进行处理分析,在对现有的传统的绘图软件进行分析比较的基础上,提出了基于局域网的绘图软件的功能需求,主要可用于网络布线,及网络通信,因此研究及开发这一种技术必将日趋成熟。12系统功能调查整个系统从总体上分为类的设计,联机操作两大部分,
12、系统应实现的功能如下图11系统功能模块图多机联合绘图系统类的设计联机操作绘图对象类的设计工具类的设计其他类的设计主机和附机的连接附机和主机的连接联机绘图南昌航空大学科技学院学士学位论文913系统目标利用MICROSOFTVISUALSTUDIO2008通过类的设计实现单机绘图,该系统实现矩形,曲线,直线,文字,图像的绘制,再通过联机操作,实现主机和附机的连接,最后实现多机联合绘图。南昌航空大学科技学院学士学位论文10第二章概要设计21系统分析本次设计的多机联合绘图系统是一个基于C实现多台计算机间协作的操作系统。多台计算机在本地的局域网络或者固定IP的INTERNET上制作同一张图,制作时将计算
13、机分为主机和附机。任何一台计算机都可以作为主机。将某台计算机作为主机后,连接到该机的其他同时制图的计算机便只能作为附机。不论是主机还是附机,每个联合制作的计算机看到的设计界面都是一样的。任何一台计算机添加或修改一个图形时,其结果都会立即反映到其他计算机上。系统要求必须要有一台计算机作为主机,并且只能有一个主机。只有当主机进入制作界面之后,其他附机才能进入制作界面。当主机退出制作界面之后,所有的附机将无法继续制作。多机联合绘图系统以几种具有代表性的图形图像的绘制方法为主,并不是实现所有图形图像的绘制。22MICROSOFTVISUALSTUDIO2008开发工具简介本次设计应用编程工具是MICR
14、OSOFTVISUALSTUDIO2008,它是面向WINDOWSVISTA、OFFICE2007、WEB20的下一代开发工具,代号“ORCAS”,是对VISUALSTUDIO2005一次及时、全面的升级。VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用VISUALSTUDIO2008可以高效开发WINDOWS应用。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时VISUALSTUDIO2008支持项目模板、调试器和部署程序。VISUALSTUDIO2008可以高效开发WEB应用,集成了AJAX10,包含AJAX项目模板,它
15、还可以高效开发OFFICE应用和MOBILE应用。23架构设计在多机联合绘图系统中,为了简化起见,只实现矩形,曲线,文字,直线和图像等基本图形图像的绘制。南昌航空大学科技学院学士学位论文11231绘图对象类设计为了统一管理各种绘图对象,可以将要绘制的对象抽象成一个抽象基类DRAWOBJECT,其他的绘制对象则从DRAWOBJECT继承,在扩充类中,通过重写DRAWOBJECT类的属性和方法,即可实现针对特定的图形图像的绘制。各绘图对象类之间的关系如图21所示。在图21中,DRAWOBJECT是所要绘制对象的抽象基类,在该类中定义绘图对象的公共属性和方法。图21绘制对象间的继承关系类TRACKR
16、ECTANGLE,TRACKTEXT,TRACCURVE都是从DRAWOBJECT继承。TRACKRECTANGLE,TRACKTEXT,TRACCURVE这三个类分别表示矩形,文字,曲线的封装类,这三个类中均不实现绘制方法,而是由其派生类实现。TRACKRECTANGLE表示可以从规则矩形特征中抽取句柄的所有对象的基类,如矩形,椭圆,图像等。在这个列子中,DRAWMYRECTANGLE从TRACKRECTANGLE继承表示矩形,DRAWMYIMAGE从TRACKRECTANGLE继承表示绘制图像。如果需要绘制椭圆,只需要从TRACKRECTANGLE派生即可。TRACKCURVE是所有以点作
17、为句柄特征的所有曲线类的基类。曲线可以有带有箭头的曲线,不带箭头的曲线,封闭曲线以及其他特殊曲线等。DRAWMYCURVE从TRACKCURVE继承表示绘制的是带有箭头的曲线。TRACKTEXT是所有文字绘制的基类,DRAWMYTEXT类从TRACKTEXT实现文字的绘制,如果需要其他效果的文字,一样可以从TRACKTEXT类派生。232工具类设计当用户使用鼠标拖放绘制,选中和移动对象时,都会用到窗体或控件MOUSEMOVE,MOUSEDOWN,MOUSEUP事件。对于不同的对象,这些鼠标事件中的实现代码也不尽相同,为此需要提供一个实现图形图像鼠标控制基类TOOLOBJECT当用户南昌航空大学
18、科技学院学士学位论文12通过鼠标移动图像,绘制矩形,绘制文本,绘制曲线,绘制直线的操作时,将这些类从TOOLOBJECT类派生,然后在扩充类中重写基类对应的方法即可。类TOOLRECTANGLE,TOOLCURVE,TOOLTEXT,TOOLIMAGE,TOOLPOINTER分别表示绘制矩形,曲线,文字,图像和平移图形图像时对应的鼠标控制操作类,他们均从TOOLOBJECT派生。各类之间的关系如图22所示图22工具类间的继承关系233其他类设计除了绘图对象类和工具类以外,系统中还包括公共类以及进行主机和附机通信的类。具体如下。(1)OBJECTID类提供为图形图像对象创建ID的方法。(2)CC
19、类提供系统公用的属性和方法定义。(3)GRAPHICSLIST类保存绘制对象的列表,同时实现绘图对象的查找,删除,选择等功能。绘制对象列表由LIST类型的字段来进行维护。(4)USER类封装与服务器通信的客户端信息。(5)MYCLIENT类封装附机的相关信息,提供附机向主机发送信息以及从主机接收信息的相关处理方法。(6)MYSERVER类封装主机的相关信息,提供主机向附机发送信息以及从附机接收信息的相关处理方法(7)MYSERVICE类封装公用的数据处理方法,提供绘制和平移对象的方法24主机与附机在主机和附机的通信中,主机收到附机的发送的字符信息后,需要解析字符串的含义,并确定主机需要执行的操
20、作。对于附机来说也是一样的道理,字符串分为命令部分和参数部分,命令部分和参数部分之间以及参数部分的各个参数之间均用逗号分隔。南昌航空大学科技学院学士学位论文13第三章系统详细设计31初始模块初始界面主要显示的就是一个初始化界面,它是整个系统的第一个模块,其相应的窗体界面见图31图31多机联合绘图初始化界面这是PREMAINFORM窗体,在多机联合绘图系统中,主机和附机都是通过发送一系列的命令后,再通过响应来实现操作的。A附机发送给主机的命令(1)通过发送LOGIN命令,附机与主机建立连接后,进入操作界面。主机接受后,返回WELCOMELOGIN命令,并把当前的图像图像字节返回给附机。(2)通过
21、发送LOGOUT命令,附机退出制作。主机收到此命令后,清除附机对应的信息,结束与此附机对应的线程,同时把命令发送给其他附机。(3)通过GETID命令来获取图形图像的唯一的IDB主机发给附机的命令(1)通过ID命令,主机返回给图像图形的ID(2)通过LOGOUT命令,主机退出制作C主机IP的确立核心代码如下IPADDRESSIPIFIPADDRESSTRYPARSETEXTBOXSERVERTEXT,OUTIPFALSETOOLSTRIPLABEL1TEXT“主机IP地址格式不正确,请重新输入“南昌航空大学科技学院学士学位论文14BUTTONOKENABLEDTRUERETURNELSETOOL
22、STRIPLABEL1TEXT“正在连接主机,请稍等“BACKGROUNDWORKER1RUNWORKERASYNCWHILEBACKGROUNDWORKER1ISBUSYIFBACKGROUNDWORKER1CANCELLATIONPENDINGFALSEAPPLICATIONDOEVENTS32绘图模块设计此模块是整个系统的核心,实现主要的功能矩形,曲线,直线,文字,图像的基本绘制,以及删除,打印,导出图像的基本功能。图32多机联合绘图程序其主要通过菜单来实现下跳到其他窗体,通过菜单实现链接不同窗体其核心代码如下;南昌航空大学科技学院学士学位论文15PUBLICPARTIALCLASSMA
23、INFORMFORMPUBLICMAINFORMINITIALIZECOMPONENTTHISSUSPENDLAYOUTCCPALETTENEWPALETTECCPALETTEDOCKDOCKSTYLEFILLTHISCONTROLSADDCCPALETTETHISRESUMELAYOUTSETUSERSTATECCMYSERVICEMAINFORMTHISIFCCUSERSTATEUSERSTATESERVER|CCUSERSTATEUSERSTATESINGLEUSERCCPALETTEDESERIALIZEOBJECTCCBACKUPFILENAMEELSECCMESENDTOSERVE
24、R“LOGIN“321矩形的绘制(1)在解决方案管理器中,添加一个名为DRAWOBJECTCS的类,表示所有图形图像的基类,代码定义如下;PUBLICABSTRACTCLASSDRAWOBJECTPRIVATEBOOLSELECTED/是否选择了该对象PUBLICBOOLSELECTEDGETRETURNSELECTEDSETSELECTEDVALUEPROTECTEDCOLORPENCOLOR/画笔颜色PUBLICCOLORPENCOLOR南昌航空大学科技学院学士学位论文16GETRETURNPENCOLORSETPENCOLORVALUEPROTECTEDINTPENWIDTH2/画笔宽度
25、PUBLICINTPENWIDTHGETRETURNPENWIDTHSETPENWIDTHVALUEPROTECTEDINTIDPUBLICINTIDGETRETURNIDSETIDVALUE然后再添加一个名为DRAWMYRECTANGLE的类文件,表示要绘制的矩形对象,让该类从DRAWOBJECT继承,并重写DRAWOBJECT类的DRAW方法。主要代码如下;CLASSDRAWMYRECTANGLETRACKRECTANGLEPUBLICDRAWMYRECTANGLEPUBLICDRAWMYRECTANGLEINTX,INTY,INTWIDTH,INTHEIGHT,COLORPENCOLOR
26、,INTIDTHISOBJRECTANGLENEWRECTANGLEX,Y,WIDTH,HEIGHTTHISPENCOLORPENCOLORTHISIDIDPUBLICOVERRIDEVOIDDRAWGRAPHICSGPENPENNEWPENPENCOLORGDRAWRECTANGLEPEN,OBJRECTANGLEPENDISPOSE南昌航空大学科技学院学士学位论文17(2)在解决方案管理器中,添加一个名为CCCS的类,提供系统公共的属性和方法。CC类中提供了为图形图像对象分配ID的方法。具体代码请看附录的源代码;(3)分别添加名为TOOLOBJECTCS和TOOLRECTANGLECS的类
27、文件,其中,TOOLOBJECT表示封装鼠标事件的操作基类,TOOLRECTANGLE实现绘制矩形是的鼠标操作。TOOLOBJECT类的主要代码如下;CLASSTOOLOBJECTPROTECTEDBOOLISNEWOBJECTADDEDFALSEPUBLICVIRTUALVOIDONMOUSEDOWNPALETTEPALETTE,MOUSEEVENTARGSEISNEWOBJECTADDEDFALSECCSETNEWIDPUBLICVIRTUALVOIDONMOUSEMOVEPALETTEPALETTE,MOUSEEVENTARGSEIFISNEWOBJECTADDEDFALSERETURN
28、POINTPOINTNEWPOINTEX,EYINTINDEXCCMYSERVICEFINDOBJECTINDEXCCIDIFEBUTTONMOUSEBUTTONSLEFTDRAWOBJECTWPALETTEGRAPHICSINDEXWMOVEHANDLETOPOINT,5PALETTEREFRESHPUBLICVIRTUALVOIDONMOUSEUPPALETTEPALETTE,MOUSEEVENTARGSEPALETTECAPTUREFALSEPALETTEREFRESHISNEWOBJECTADDEDFALSE/添加新的图形对象/PROTECTEDVOIDADDNEWOBJECTPALE
29、TTEPALETTE,DRAWOBJECTWPALETTEGRAPHICSUNSELECTALLWSELECTEDTRUEPALETTEGRAPHICSADDWPALETTECAPTURETRUEPALETTEREFRESH南昌航空大学科技学院学士学位论文18让TOOLRECTANGLE类从TOOLOBJECT继承,并重写基类的ONMOUSEDOWN和ONMOUSEMOVE事件。主要代码如下;CLASSTOOLRECTANGLETOOLOBJECTPUBLICTOOLRECTANGLEPUBLICOVERRIDEVOIDONMOUSEDOWNPALETTEPALETTE,MOUSEEVENTA
30、RGSEBASEONMOUSEDOWNPALETTE,EDRAWMYRECTANGLEWNEWDRAWMYRECTANGLEEX,EY,15,15,COLORRED,CCIDADDNEWOBJECTPALETTE,WISNEWOBJECTADDEDTRUEPUBLICOVERRIDEVOIDONMOUSEUPPALETTEPALETTE,MOUSEEVENTARGSEIFISNEWOBJECTADDEDFALSERETURNBASEONMOUSEUPPALETTE,EIFCCUSERSTATEUSERSTATESINGLEUSERINTINDEXCCMYSERVICEFINDOBJECTIND
31、EXCCIDDRAWMYRECTANGLEWDRAWMYRECTANGLEPALETTEGRAPHICSINDEX/左上角X坐标,左上角Y坐标,宽,高,颜色,IDCCMESENDTOSERVERSTRINGFORMAT“DRAWMYRECTANGLE,0,1,2,3,4,5“,WOBJRECTANGLEX,WOBJRECTANGLEY,WOBJRECTANGLEWIDTH,WOBJRECTANGLEHEIGHT,WPENCOLORTOARGB,CCIDPALETTEGRAPHICSREMOVECCID4在MULTIDRAW2CS中定义一个TOOLTYPE枚举,表示绘制图形图像的类型;再定义一个
32、TOOLOBJECT类型的ACTIVETOOL对象,表示当前的活动对象;然后定义南昌航空大学科技学院学士学位论文19一个TOOLOBJECT类型的TOOLS数组,表示所有鼠标操作类。主要代码如下;PUBLICENUMTOOLTYPEPOINTER,RECTANGLE,TEXT,CURVE,IMAGE,LINEPRIVATETOOLTYPEACTIVETOOL在主程序窗体MULTIDRAW2的构造函数中,进行初始化操作。CCPANELTHISPANELLTOOLSINTTOOLTYPERECTANGLENEWTOOLRECTANGLE(5)双击主程序窗体上的矩形按钮,在其CLICK事件中添加代码
33、;ACTIVETOOLTOOLTYPERECTANGLE6单击主窗体上的PANEL控件,分别找到其MOUSEDOWN,MOUSEMOVE和MOUSEUP事件及PAINT事件,在对应的事件中添加下面的代码;PRIVATEVOIDPALETTE_MOUSEDOWNOBJECTSENDER,MOUSEEVENTARGSETHISCAPTUREFALSEIFEBUTTONMOUSEBUTTONSLEFTTOOLSINTACTIVETOOLONMOUSEDOWNTHIS,EELSEIFEBUTTONMOUSEBUTTONSRIGHTACTIVETOOLPALETTETOOLTYPEPOINTERPRIV
34、ATEVOIDPALETTE_MOUSEMOVEOBJECTSENDER,MOUSEEVENTARGSEIFEBUTTONMOUSEBUTTONSLEFT|EBUTTONMOUSEBUTTONSNONETOOLSINTACTIVETOOLONMOUSEMOVETHIS,EELSETHISCURSORCURSORSDEFAULT南昌航空大学科技学院学士学位论文20PRIVATEVOIDPALETTE_MOUSEUPOBJECTSENDER,MOUSEEVENTARGSEIFEBUTTONMOUSEBUTTONSLEFTTOOLSINTACTIVETOOLONMOUSEUPTHIS,E(7)运行程
35、序,单击矩形按钮,在PANEL内绘制多个任意大小的矩形,运行效果如图33所示图33任意大小的矩形绘制322曲线的绘制(1)在解决方案资源管理器中,添加一个名为DRAWCURVE的类,使其从DRAWOBJIECT类中派生,添加相应的代码。在DRAWCURVECS类中添加LIST类型的对象POINTLIST,使其保存曲线所经过的点的集合,POINTLIST中的两个相邻点之间的距离大于指定的长度。此处给出的DRAW方法的实现代码;南昌航空大学科技学院学士学位论文21PUBLICOVERRIDEVOIDDRAWGRAPHICSGPOINTPTSNEWPOINTPOINTLISTCOUNTPOINTLI
36、STCOPYTOPTSPENPENNEWPENPENCOLOR,PENWIDTHGSMOOTHINGMODESMOOTHINGMODEANTIALIASADJUSTABLEARROWCAPMYARROWNEWADJUSTABLEARROWCAP4,4,TRUEPENCUSTOMENDCAPMYARROWIFPTSLENGTH1GDRAWLINEPEN,PTS0,PTS1ELSEGDRAWCURVEPEN,PTSPENDISPOSE(2)在解决方案管理器中添加一个名为TOOLCURVECS的类,使其从TOOLOBJIECT类派生。主要代码如下;CLASSTOOLCURVETOOLOBJECTPR
37、IVATEINTMINDISTANCE20PRIVATEPOINTMYLASTPOINTPUBLICOVERRIDEVOIDONMOUSEDOWNPALETTEPALETTE,MOUSEEVENTARGSEBASEONMOUSEDOWNPALETTE,ECCISTOOLPOINTFALSEPOINTPNEWPOINTEX,EYDRAWMYCURVEWNEWDRAWMYCURVEP,COLORRED,2,CCIDADDNEWOBJECTPALETTE,WMYLASTPOINTPISNEWOBJECTADDEDTRUEPUBLICOVERRIDEVOIDONMOUSEMOVEPALETTEPALE
38、TTE,MOUSEEVENTARGSEIFISNEWOBJECTADDEDFALSE南昌航空大学科技学院学士学位论文22RETURNPOINTPOINTNEWPOINTEX,EYINTINDEXCCMYSERVICEFINDOBJECTINDEXCCIDDRAWMYCURVEWDRAWMYCURVEPALETTEGRAPHICSINDEXIFEBUTTONMOUSEBUTTONSLEFTINTDXMYLASTPOINTXPOINTXINTDYMYLASTPOINTYPOINTYINTDISTANCEINTMATHSQRTDXDXDYDYIFDISTANCE1WMOVEHANDLETOPOINT
39、,WHANDLECOUNTELSEWADDPOINTPOINTMYLASTPOINTPOINTPALETTEREFRESH在TOOLCURVECS的类中,当用户按下鼠标左键时,即可触发ONMOUSEDOWN事件,在该事件中,捕获鼠标所在的点,并以此点为曲线的终点MYLASTPOINT,同时创建曲线对象W。(3)在主窗体的构造函数内添加代码;TOOLSINTTOOLTYPECURVENEWTOOLCURVE(4)在主窗体上双击曲线按钮,在对应的CLICK事件中添加如下代码;ACTIVETOOLPALETTETOOLTYPECURVE(5)运行程序,观察运行结果如图所示;南昌航空大学科技学院学士学
40、位论文23图34曲线的绘制这里说明下,这是DRAWMYCURVE从TRACKCURVE继承表示绘制的是带有箭头的曲线。323直线的绘制(1)运行以及基本构思还是和前面讲的矩形,曲线是如出一辙的。还有直线的绘制DRAWMYLINE是从TRACKCURVE继承的。(2)在解决方案管理器中添加一个名为TOOLLINECS的类,使其从TOOLOBJIECT类派生。主要代码如下CLASSTOOLLINETOOLOBJECTPRIVATEINTMINDISTANCE20/PRIVATEPOINTMYLASTPOINTPRIVATEPOINTMYFIRSTPOINTPRIVATEPOINTMYFIRSTPO
41、INT1PUBLICOVERRIDEVOIDONMOUSEDOWNPALETTEPALETTE,MOUSEEVENTARGSEBASEONMOUSEDOWNPALETTE,ECCISTOOLPOINTFALSEPOINTPNEWPOINTEX,EY/DRAWMYLINEWNEWDRAWMYLINEP,COLORRED,2,CCID/ADDNEWOBJECTPALETTE,W南昌航空大学科技学院学士学位论文24MYFIRSTPOINTMYFIRSTPOINT1PISNEWOBJECTADDEDTRUEPUBLICOVERRIDEVOIDONMOUSEMOVEPALETTEPALETTE,MOUS
42、EEVENTARGSEIFISNEWOBJECTADDEDFALSERETURNPOINTPOINTNEWPOINTEX,EYINTINDEXCCMYSERVICEFINDOBJECTINDEXCCIDDRAWMYLINEWDRAWMYLINEPALETTEGRAPHICSINDEXIFEBUTTONMOUSEBUTTONSLEFTINTDXMYFIRSTPOINT1XPOINTXINTDYMYFIRSTPOINT1YPOINTYINTDISTANCEINTMATHSQRTDXDXDYDYIFDISTANCE1WMOVEHANDLETOPOINT,WHANDLECOUNTELSEWADDPOI
43、NTPOINT/这里有问题MYFIRSTPOINT1POINTPALETTEREFRESH(3)在主窗体的构造函数内添加代码;TOOLSINTTOOLTYPELINENEWTOOLLINE(4)在主窗体上双击曲线按钮,在对应的CLICK事件中添加如下代码;ACTIVETOOLPALETTETOOLTYPELINE(5)运行程序,观察运行结果如图所示;南昌航空大学科技学院学士学位论文25图35直线的绘制324文字的绘制(1)这是在解决方案源管理中,添加一个名为DRAWTEXECS的类,使其从DRAWOBJECT类中派生,该类DRAW方法的实现代码如下;PUBLICOVERRIDEVOIDDRAW
44、GRAPHICSGBRUSHBNEWSOLIDBRUSHPENCOLORIFTHISFONTNULLTHISFONTDISPOSETHISFONTNEWFONT“宋体“,FONTHEIGHT,FONTSTYLEREGULAR,GRAPHICSUNITPIXELMATRIXMATRIXNEWMATRIXMATRIXROTATEATANGLE,STARTPOINTGTRANSFORMMATRIXGDRAWSTRINGTEXT,FONT,B,STARTPOINTGRESETTRANSFORMMATRIXDISPOSEBDISPOSE南昌航空大学科技学院学士学位论文26在这段代码中,绘制文字前,首先创
45、建一个名为MATRIX的MATRIX类型的对象,然后以文字的起点STARPOINT为中心旋转ANGLE角度即可绘制任意方向的文字。而绘制的文字的大小则是通过控制字体的高度来实现的。(2)在解决方案资源管理器中,添加一个名为TOOLTEXTCS的类,使其从TOOLOBJECT类派生,主要代码如下;CLASSTOOLTEXTTOOLOBJECTPUBLICOVERRIDEVOIDONMOUSEDOWNPALETTEPALETTE,MOUSEEVENTARGSEBASEONMOUSEDOWNPALETTE,EDRAWMYTEXTWNEWDRAWMYTEXTEX,EY,CCTEXTINFOTEXT,C
46、CTEXTINFOCOLOR,CCIDADDNEWOBJECTPALETTE,WISNEWOBJECTADDEDTRUEPUBLICOVERRIDEVOIDONMOUSEMOVEPALETTEPALETTE,MOUSEEVENTARGSEIFISNEWOBJECTADDEDFALSERETURNPOINTPOINTNEWPOINTEX,EYINTINDEXCCMYSERVICEFINDOBJECTINDEXCCIDIFEBUTTONMOUSEBUTTONSLEFTDRAWOBJECTWPALETTEGRAPHICSINDEXWMOVEHANDLETOPOINT,2PALETTEREFRESHP
47、UBLICOVERRIDEVOIDONMOUSEUPPALETTEPALETTE,MOUSEEVENTARGSEIFISNEWOBJECTADDEDFALSERETURNBASEONMOUSEUPPALETTE,EIFCCUSERSTATEUSERSTATESINGLEUSERINTINDEXCCMYSERVICEFINDOBJECTINDEXCCIDDRAWMYTEXTWDRAWMYTEXTPALETTEGRAPHICSINDEX南昌航空大学科技学院学士学位论文27/X1,Y1,X2,Y2,旋转角度,文字内容,颜色,文字高,IDCCMESENDTOSERVERSTRINGFORMAT“DRA
48、WMYTEXT,0,1,2,3,4,5,6,7,8“,WSTARTPOINTX,WSTARTPOINTY,WENDPOINTX,WENDPOINTY,WANGLE,WTEXT,WPENCOLORTOARGB,WFONTHEIGHT,WIDPALETTEGRAPHICSREMOVECCID在ONMOUSEDOWN事件中,将鼠标所在的点作为起点,同时创建DRAWTEXT对象。在ONMOUSEMOVE事件中,捕获鼠标所在的点,当鼠标当前位置与起始点之间的距离能够显示文字时,将该点作为文字的终点,同时计算文字的角度。(3)在解决方案管理器中添加一个名为TEXTDIALOGCS的新窗体,提供文本输入和颜
49、色的选择的功能,界面如图36所示;图36TEXTDIALOG的设计界面在TEXTDIALOGCS的代码中添加两个属性MYTEXT和MYCOLOR其中,MYTEXT属性表示文本框内的输入的内容,MYCOLOR属性表示文本框内容的字体颜色。具体代码如下;PUBLICPARTIALCLASSTEXTDIALOGFORMPRIVATESTRINGTEXTPUBLICSTRINGMYTEXTGETRETURNTEXTSETTEXTVALUEPRIVATECOLOR_COLORPUBLICCOLORMYCOLORGETRETURN_COLORSET_COLORVALUEPUBLICTEXTDIALOGINITIALIZECOMPONENT南昌航空大学科技学院学士学位论文28THISFORMBORDERSTYLEFORMBORDERSTYLEFIXEDDIALOGT