版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要二十一世纪已经是信息化的时代。 青少年是祖国的未来与希望, 培养青少年对计 算机与电子技术的兴趣愈加显得重要。各种机器人比赛目前在高校间已经很普 及,然而在中小学却仍不能普遍开展, 其中一个很重要的原因就是对于机器人编 程的运行环境只有具有编程能力的专业人士才能掌握。 一般的中小学生根本不具 有专业的编程能力。本论文就是结合游历机器人设计开发一款可供青少年使用的上位机软件, 具有程 序编辑编译与图形遍历自动生成代码的功能。 该论文设计的游历机器人上位机软 件使用了 VC+6.0 开发环境,基于 MCF 框架类界面编程。具有执行速度快,易 升级等特点, 同时对游历机器人控制函数进行了封装,
2、有利于对游历机器人知识 产权的保护。AbstractIt is the century of informatization now.the youngsters is the hope and future of our country,so it is significant to develop the interest to computer and electronic technology.All kinds of competition about robot is common in the universities while there is few competition
3、 in the middle schools and the primary schools.The most important reason is that the translating and editing environment could be mastered by the coding worker who can program well.the upper software of the traveling robot is designed and developed in the paper which could be used by youngsters.the
4、program can be edited and translated in the software. what's more,the program could be produced through traveling. the soft is developed by C plus plus basic the MFC Class in the developing environment of VC+ 6.0. the soft executed quickly and easily updated. in the meantime,the function details
5、 of the traveling robot is hided which is to the benefit of konwledge rihgt.第一章绪论1.1引言随着信息化的快速发展,嵌入式和3G物联网正成为IT业发展的主流。青少年是 祖国的未来,提高他们对计算机技术和电子技术的兴趣更加显得重要与急迫。然而,计算机的普及应用只是限于文字编辑,简单图片处理以及通信等方面的应用。 这些远不能让青少年了解和应用计算机。游历机器人是基于前后十个光传感器的 游历小车,可以通过Atmega128处理器进行控制小车寻迹。然而其编译环境要具 有专业的编程能力才能使用,而且功能繁多复杂,对于中小学生而
6、言根本不能使 用,从而成为中小学生对于计算机技术的了解和应用的一个巨大的挑战。本论文利用VC+目关知识开发了一个功能较少,简单易用的上位机软件,旨在 完成对程序编辑编译和通过游历地图自动生成程序代码功能,并且对今后该上位机软件的进一步升级做出尝试性探索性。1.2上位机的概述上位机是一台可以发出特定操控命令的计算机,通过操作预先设定好的命令,将命令传递给下位机,通过下位机来控制设备完成各项操作(应用最多的地方如: 工业、水利、供电部门、交通等方面)。上位机都有特定的编程,有专门的开发系统,或以上是已经规定好任务,只能按特定的任务进行操作。简单说上位机就是命令的下达者,而下位机则是命令的执行者。
7、两机如何通讯,一般取决于下位机。TCP/IP 一般是支持的。但是下位机一般具 有更可靠的独有通讯协议,购买下位机时,会带一大堆手册光盘,告诉你如何使 用特有协议通讯。里面会举大量例子。一般对编程人员而言一看也就那么回事, 使用一些新的API罢了。多语言支持功能模块,一般同时支持数种高级语言为上 位机编程。这里给出一种典型的上位机软件,物联网应用中收集感知节点信息,进行显示,控制的应用控制台。此软件主要有两部分组成,数据收发部分和显示部 分上位机在系统中的位置:处于网络层中,与嵌入式网关通过网线相连。实际应用 时是放置在实验室的老师工作台上,供实验室的老师使用。上位机的功能:此软件实时监视实验实
8、中每个实验台的状况,包括上电或断电状态,实验台是否发出了警告,是否发出了求助信号,并对这些信号做出应答,还 控制LED屏的文字显示。上位机的设计实现:此软件主要有两部分组成,数据收发部分和显示部分。数据收发指的是和嵌入式网关的数据收发。 两者是通过网线连接的,所以应用的是 TCP/IP的Socket套接字编程,嵌入式网关的设计中已经提到过,它在和上位 机通信中是作为服务器的,那么上位机就是作为连接发起方。为了能保证网络连 接的稳定性,我们把Socket读写的程序代码放在了 try catch() 块中,一 旦网络连接不正常,就会捕获到该异常,从而关闭程序。1.2课题介绍1.3编译器编译程序是指
9、这样一种程序,通过它能够将用高级语言编写的源程序转换为与之 在逻辑上等价的低级语言形式的目标程序。 一个高级程序的执行通常将分为两个 阶段,即编译阶段和运行阶段。编译阶段将院程序变为目标程序;运行阶段则由所生成的目标程序联通运行系统(数据空间分配子程序、标准函数程序等)接受 程序的初始数据作为输入,运行后输出计算结果。如果编译生成的目标程序是汇 编语言程序形式的,那么在编译与运行阶段之间还要添加一个汇编阶段,它将编译生成的汇编语言目标程序再经过汇编程序编程机器语言目标代码程序用高级语言编写的程序也可通过解释程序来执行。解释程序也是一种翻译程序, 它将源程序作为输入,一条语句接一条语句地读入并解
10、释执行, 解释程序与编译 程序的主要区别就是:编译程序将源程序翻译成目标程序后再执行该目标程序; 编译程序将源程序翻译成目标程序后在执行该目标程序后再执行该目标程序;而解释程序则逐条读出源程序中的语句并解释执行,即在执行程序的孤傲城中并产生目标程序。典型的解释型高级语言是BASIC语言汇编语言大大提高了编程的速度和准确性,至今人们人在使用,在存储容量小和 随度快的要救下尤其如此。但是,汇编语言依赖于具体的机器的额提醒是无法改 变的,这给编程和调试增加了难度。很明显,编程技术发展的下一个重要步骤就 是要更用简洁的数学定义或自然语言来描述和编写程序,它应与任何机器无关, 而且可以通过翻译 程序将其
11、 翻译为计 算机可以 直接执行的 二进制 代码。19541957年,IBM 的John Backs带领一个研究小组对 FORTRAN语言及其编 译器进行了开发。与此同时,波澜语言学家Noam Chomsky开始了他的自然语言 结构研究,他根据文法的难易程度及识别他们所需的算法对语言的进行了分类, 定义了 0型,1型,2型和3型这四类文法及其相应的形式语言,并分别与相应 的识别系统相联系。2型文法(上下文无关文法)被证明是程序设计语言中最有 用的文法,它代表着目前程序设计语言的结构标准。Noam Chomsky的研究结果是编译器变的异常简单,甚至还具有自动化的功能。有限自动机和正规表达式与 上下
12、文无关文法紧密相关,它们与Noam Chomsky的3型文法相对应,并引出了 表示程序设计语言的单词符号形式,接着又产生了生成目标代码方法一一这就是 最初的编译器。编译过程和编译程序结构编译程序结果过程是指从输入源程序开始到输出目标程序为止的整个过程。一般要经过五个过程词法分析:将源程序中的字符串编程单词符号流的过程, 词法分析所遵守的是语 言的构词规则。语法分析:在词法分析的基础上,根据语言的语法规则(文法规则)把单词符号 流分解成各类语法单位(语法范畴)。语法分析所遵循的是语言的语法规则,语 法规则通常用上下无关文法描述。语义分析和中间代码生成:对各类不同语法范畴按语言的语义进行初步翻译,
13、 包 含两个方面的工作:一是对各种语法范畴星星静态语义检查。二是在语义检查正 确的情况下进行中间代码的翻译。优化:该阶段任务是对前阶段产生的中间代码进行等价变换或者改造,以期获得更为高效(节省时间和代码)目标代码。目标代码生成:该阶段任务是把中间代码(或经优化处理之后)变换成特定机器 上的机器语言程序或汇编语言程序,以实现最终的翻译工作。编译程序的开发常常采用自编译,交叉编译,移植等技术实现。自编译:用某种高级语言书写自己的编译程序称为自编译。交叉编译:交叉编译是指用 A机器上的编译程序来产生可在 B机器上运行的目 标代码。移植:移植是指A机器上的某种高级语言的编译程序稍加改动后能够在B机器上
14、运行。构造编译程序应具备的知识内容对被编译的源程序,要深刻理解结构和含义。必须对目标机器的硬件和指令系统有深刻的了解。必须掌握编译方法,编译方法掌握得如何将直接影响到编译程序的成败,一个好 的编译方法可能得到事半功倍的效果。1.2 .1选题背景随着微电子技术、网络技术等信息技术的飞速发展,嵌入式已经成为具有广阔发 展前的技术方向之一。结合机械等相关专业,各种下位机已经变得相当常见。 在 各种下位机中,智能机器人能够节省劳动力,代替人工完成一些危险性作业,在 现代社会中愈加显得重要。目前在国内各种游历小车已经做的相当成熟, 在军事 排爆,媒体摄影等方面已经有很多技术成熟的产品。 例如威海未来机器
15、人有限公 司的消防机器人,东莞易步机器人有限公司的智能电动车等。 机器人学的进步和 应用是20世纪自动控制最有说服力的成就人技术综合了务学科的发展成果 代表了肓技术的发展前沿 它在人类生活应 用领域的不断扩大正引起国际上重新认识机器人技术的作用和影响。 随着计算机 技术和人丄秤能技术的匸速发.展 使机器人在功能和技术层次I冇了很人的提 离移动机器人和机器人的视淀和他就等技术就是兎型的代表。*:这些技术的80年代力的系统称为智能机器人导了机器人強术的研允和应冃 血冃乂赋了了机器人技术向深广发展的巨大空 间 水下机器人、空间机器人、空屮札器人、地面机器人、微小型机器人等各种 用途的机器人相继问智能
16、小车是智能机器人的前身也是人多机器人的基本构成部分Z 卸能小车町以口我控制.完成一些规定的任务或者是通过人对其进行远程的控制使它按照人们的旨意在一些人类无法工作的坏境屮代替人类定成一些复朵的尚精度的丄作 如壁障功能、循迹、诰音提 示、金属探测及转移、里程测量、角度测量、拆弹机器小车、救火机器小车等等。 这些功能可根据实际需要灵活组合 而对于这些机器人的上位机软件大多数都是基于控制的。1.2.2课题的工作内容开发一款上位机软件,主要完成两个工作内容1、完成编辑环境的开发,该编辑环境具有一般文字编辑器所具有的功能。2、实现函数检索功能,对于错误函数能够检测出来,并且能够报错。3、设计开发一个遍历界
17、面,能够记录对图的遍历过程,遍历完成后自动生成代 码。4、分析游历小车程序,对小车游历程序进行模块化。从而可以根据小车运动自 动生成代码。第二章开发工具与硬件设备2.1开发环境介绍2.1.1C+ 概述面向对象的程序设计方法将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体对象。对同类型对象抽象出其共性,形成类。类 中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口,与 外界发生关系,对象与对象之间通过消息进行通信。这样,程序模块间的关系简 单,程序模块的独立性、数据的安全性具有良好的保障。同时,通过继承与多态, 使程序有很高的可重用性,使得软件的开发和维护都更
18、为方便。C+是在C语言基础上为支持面向对象的程序设计而研制的一个通用目的的程序设计语言,它是在1980年由AT&T贝尔实验室的Bjarne Stroustrup 博士创 建的。C+语言的主要特点表现在两个方面,一是全面兼容C,二是支持面向对象的方法。C+的确是一个更好的C语言。它保持了 C的简洁、高效和接近汇编 语言等特点。对C的类型系统进行了改革和扩充,因此 C+比C更安全,C+啲 编译系统能检查出更多的类型错误。由于 C+与 C保持兼容,这就使许多C代码 不经修改就可以为C+所用,用C编写的众多的库函数和使用软件可以用于 C+ 中。另外,由于C语言已被广泛使用,因而及大地促进了 C
19、+的普及和面向对象 技术的广泛应用。然而,也正式由于对 C的兼容,使得C+不是一个纯正的面向 对象的语言。C+M有双重特点,但它在概念上是和 C完全不同的语言,我们应 该注意按照面向对象的思维方式去编写程序。2.1.2 VC6.0 概述Microsoft Visual Studio 6.0 是 Microsoft 推出的应用非常广泛可视化 开发环境,它提供了功能强大的集成开发环境,用以方便有效地管理、编写、编 译、跟踪C+程序、大大减少了程序员的工作,提咼了程序代码的效率。它以C+ 语言为基础, 以众多的集成工具为骨架, 是计算机界公认的最优秀的应用程序开 发工具之一。 Windows 是目前
20、最流行的平台应用程序开发环境。 Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用 程序,也可以用来创建网络服务、智能设备应用程序和Office 插件等。2.1.3MFC框架类概述VC+6.0中的MFGg架类是微软提供的一种应用程序框架,其中包括框架类,视 图类,应用程序类,文件类等,在建立 MFCAppWizard.exe 工程时,系统就会为 开发者提供一个现成的界面,其它的功能只要求在其框架类中添加即可。2.14烧写软件 AVR_fighterAVR单片机ISP下载编程软件版 本: 1.0 (LICENSE)操作系统:Win98,Win2
21、000,WinMe,WinXP,win2003 (注:Windows Vista 未测试) 建议设置 : 屏幕分辩率 1024 X 768 以上第三章 软件功能简介 该软件主要实现两个功能3.1 编辑编译界面 在该编辑界面中可以实现程序编辑功能, 具有剪切复制等一般文本编辑具有的功 能。在菜单栏中添加一个编译菜单项, 该编译菜单项具有编译和生成机器代码两 个功能。在工具栏中分别添加编译和生成机器码两个按钮。 在该编辑框架的左上方添加一个动态的图标, 具有不停变换图标的效果。 在该编 辑框(状态栏)的左下方显示当前编辑框中光标所在位置(横坐标 x 与纵坐标 y 的值)。在右下方显示一个动态的系统
22、时间(时分秒) 。编译功能:在点击菜单项中的编译子菜单后, 系统能够遍历编辑框中的函数, 如 果遍历出函数有错, 则弹出对话框提示错误函数所在位置。 如果遍历后函数无错 后则将列表文件中的内容显示在编辑框中。在单机菜单项的保存后只需保存 为.1st问价即可。生成机器代码: 在编译无误后单击菜单项中生成机器代码或者单击工具栏后, 在 编辑框中显示响应的机器代码,然后保存为.hex文件。该代通过通过 AVR_fighter 软件烧写都机器人内后机器人即可运行。运行界面报错对话框Mglrl£:nk Ii>u£ FjJjd &h. Flltdi 1 k Fund Lt
23、i F1L«? Z Kc±j1U Duxui /iRnHily汇编代码*-溯对机耳AJF亢再:业XW1! ani'liVtiyi Mitill 昕;' p ¥ c MAUOOW 94QC OQTfJMP_FlBrtl._Ir?xl_si3r1PrograiTi 匚od亡(iekI ar±A|_耳怙叫_比吊_隰少|;00Q72 EFCFLDIfttB.OwFFUUDF3 kZDlWlRZaUxZInnnr4 rfcdmnthtn.n?*0007$ BFDEOUTOk3E.«29uunn bi clMJLIIR?H.Ux1Lnnnr
24、r dnnn阳ClFt?却DOQ?t EAOAUDIUUD/f HUUHSTYr«HlUnnnrA 7dnncinFWUOQ76E«EOiLDHRJDQaOTC EOF?LDVRJ1.2rinnFD EftflELDI00071 ME QiQP1RMLDDflATF DJF1CPCRJ1.R17IJUQ34 FD11HEQDwDDHHnnnsi 删t5TZ«.HI000$? CffBRJMP(hd)D7Euun&j BjunSTZ.Hlfrnnnsi EEEniIDID0095 EtFDUDIRJ1JUUUU L«ADLDIR7E.Unnns f
25、mhpIDIDDO« EtIDLOIRIT-0UUUH LWU31RIE.Unnna bfdbLFTDM3H,Hlii00036 3EEtOP1RMLQmE4oootc a?nCPCR11.R1 ?nnnaf> fdziBEDDWDD92OOOffiELPM0004T 9G3I启DMR3Q.1IJUOW 9ZDDSTXt.R#unn$i hit?IWMPiMDRRV3.2对途径的遍历本功能通过一个编辑框和若干按钮实现。每个按钮对应一个函数,在本遍历界面 中仅实现前进后退左转右转四个函数。 遍历开始前首先应该单击开始按钮 (后台 添加主函数代码),然后根据图的遍历需要单击各个按钮
26、(编辑框中同时显示单 击按钮的次序)。在遍历完成后需要单击结束按钮(后台添加返回函数)。单击显示C、汇编、机器码三个按钮会在编辑框中显示响应的 C语言代码汇编语 言代码、机器语言代码。其中清除按钮是消除所有代码。 保存按钮可以将代码保 存为响应的文件。图的遍历可分为深度遍历与广度遍历,遍历过程见附录。誇眉皿0人”農用覲-licxMufl Tixual C+ - IDLC-cpfJOb Ella fidi L Haw Xacvrc £>-3jacn iill Id-ole iLbdov Jjilp-_ fl | K|机器语言代码i-E X屯a匚蛋宙*|ce坤i砂二1卅|CDLG-
27、jvJ|AII daftq-tenibwiB,| t-| *0nCCb-寸M”t-di L fLia jpcrrt EX-sjie%tmIe IlMv JLf-gBCDJLSf 'e nDia* 01 三ini + 2j Ic-on + _j| Menu+ jlnolb t .jVerili辭历机磊© 口皿!|列附rK Build l Ibuf Fi-dd hh. F11«j 1 Fjhd in F1L« E fjb±i 't. S4L Drtu|/3 特的业i£qk kwn3.3烧写程序保存为.1st文件后,需要用AVR_fi
28、ghter软件通过USB接 口将程序烧写到小车内。第四章 开发流程图上位机软件具体功能的技术实现编辑界面的实现在VC+中创建一个 App Wizard.exe工程。在创建过程使用单文档,并且继承CeditView 类,则生成一个编辑框。 编辑框内函数检索与报错功能的实现 首先得到文本中的内容。 定义一个字符型数组用来记录文本中各种函数出现的位 置与类型,并且将其值均赋值为空格。在检索开始时,要将字符串的空格键全部消除( LeftTrim() 函数),然后判断第 一个函数是否为 main() 函数,如果不是,弹出对话框经行报错。然后在剩余的 字符串中开始检索, 遇到空格则删除空格, 如果遇到函数
29、, 判断其函数为哪种类 型,如果函数明匹配, 则在函数名类型数组中添加一个函数名开头的字符, 将数 组位置后移一位。 如果和所有的函数均不匹配, 则进行报错。定义一个整形变量, 每次消除回车换行符时经行加一, 则报错时其值就是出错函数所在的行。 定义另 一个整型变量, 每次回车换行时将其值均为零, 而在消除空格时则进行加一。 在 检索各个函数后加上各函数相应字符数目。在报错是其值就是出错函数所在的 列。函数类型数组当前非空的位置就是函数出错的位置(需要再加1)。各个函数的汇编代码和机器码的连接的实现 通过函数类型数组中的不同字符可串接不同函数的汇编代码和机器码 注:串接的不同函数代码需要从文件
30、读出char function10;for(int j=0;j<10;j+)functionj=' 'int i=0;int mes=0;/ 使其得到对话框返回值bool isture=true;int row=0;/记录出错的行号int col=0;/记录出错的列号bool isEnter=false;/ 记录是否换行,据此判断当前列出错函数位置 while(temp.Find(" ")=0)/ 消除文本开头的空格temp.TrimLeft(" ");if(temp.Find("main()")!=0)/ 如果
31、开头函数不是主函数则进行报错MessageBox(" 第一个函数为主函数! ");elsewhile(temp.GetLength()!=0)/ 依次遍历所有函数if(temp.Find(" ")=0)col+=1;elseif(temp.Find("rn")=0)/ 如果遇见换行则进行消除 temp.TrimLeft("rn");row+=1;/ 将报错行加 1 col=0;/ 换行后列变为 0else if(temp.Find("main()")=0)functioni='m'
32、;i+;temp.TrimLeft("main()");else if(temp.Find("line();")=0)functioni='i'i+;temp.TrimLeft("line();"); col+=7;else if(temp.Find("back();")=0)functioni='b' i+;temp.TrimLeft("back();"); col+=7;else if(temp.Find("left();")=0)func
33、tioni='l'i+;temp.TrimLeft("left();");col+=7;else if(temp.Find("right();")=0)functioni='r' i+;temp.TrimLeft("right();"); col+=7;else CString saywrong,nth,position;saywrong=" 函数有错 !"nth.Format("%d",i+1);positio n.Format("%d行 dy,row
34、+1,col+1);/ 弹出对话框显示第几个函数出错及其位置mes = MessageBox("第"+nth+saywrong+position);break;/ 机器主函数模块CFile file6(" 主函数 .txt",CFile:modeRead);/ 定义一个文件对象 char *pBufmainm;/ 声明一个缓冲池DWORD dwFileLenm;dwFileLenm=file6.GetLength();/ 得到文件长度 pBufmainm=new chardwFileLenm+1;/ 实例化一个缓冲区 pBufmainmdwFileLen
35、m=0;file6.Read(pBufmainm,dwFileLenm);/ 读文件file6.Close();/ 关闭文件/ 机器前进CFile file7(" 前进寻迹 .txt",CFile:modeRead);char *pBufgom;DWORD dwFileLengom;dwFileLengom=file7.GetLength();pBufgom=new chardwFileLengom+1; pBufgomdwFileLengom=0; file7.Read(pBufgom,dwFileLengom);/MessageBox(pBufgo);file7.Clo
36、se();/ 机器向后CFile file8(" 向后翻转 .txt",CFile:modeRead);char *pBufbackm;DWORD dwFileLenbackm;dwFileLenbackm=file8.GetLength();pBufbackm=new chardwFileLenbackm+1;pBufbackmdwFileLenbackm=0;file8.Read(pBufbackm,dwFileLenbackm);file8.Close();/ 机器向左CFile file9("左转 90 度 .txt",CFile:modeRea
37、d);char *pBufleftm;DWORD dwFileLenleftm; dwFileLenleftm=file9.GetLength(); pBufleftm=new chardwFileLenleftm+1; pBufleftmdwFileLenleftm=0; file9.Read(pBufleftm,dwFileLenleftm); file9.Close();/ 机器向右CFile file10("右转 90 度 .txt",CFile:modeRead);char *pBufrightm;DWORD dwFileLenrightm; dwFileLenr
38、ightm=file10.GetLength(); pBufrightm=new chardwFileLenrightm+1; pBufrightmdwFileLenrightm=0; file10.Read(pBufrightm,dwFileLenrightm); file10.Close();if(0=mes)/ 如果有函数出错则不执行汇编命令CString func=""int k=0;while(functionk!=' ')if(functionk='m'&&functionk!=' ')/ 主函数模
39、块CFile file("main.txt",CFile:modeRead);char *pBufmain;DWORD dwFileLen; dwFileLen=file.GetLength(); pBufmain=new chardwFileLen+1; pBufmaindwFileLen=0; file.Read(pBufmain,dwFileLen); file.Close();funm+=pBufmainm;func+=pBufmain;k+;continue;else if(functionk='i'&&functionk!=
40、9; ')/ 前进CFile file1("go.txt",CFile:modeRead); char *pBufgo;DWORD dwFileLengo; dwFileLengo=file1.GetLength(); pBufgo=new chardwFileLengo+1; pBufgodwFileLengo=0; file1.Read(pBufgo,dwFileLengo); /MessageBox(pBufgo);file1.Close(); funm+=pBufgom;func+=pBufgo;k+;continue;else if(functionk=&
41、#39;b'&&functionk!=' ') / 向后CFile file2("back.txt",CFile:modeRead); char *pBufback;DWORD dwFileLenback; dwFileLenback=file2.GetLength(); pBufback=new chardwFileLenback+1; pBufbackdwFileLenback=0; file2.Read(pBufback,dwFileLenback); file2.Close();funm+=pBufbackm; func+=p
42、Bufback; k+;continue;else if(functionk='l'&&functionk!=' ') / MessageBox("left();");/ 向左CFile file3("left.txt",CFile:modeRead);char *pBufleft;DWORD dwFileLenleft; dwFileLenleft=file3.GetLength(); pBufleft=new chardwFileLenleft+1; pBufleftdwFileLenleft=0; f
43、ile3.Read(pBufleft,dwFileLenleft); file3.Close();funm+=pBufleftm;func+=pBufleft;k+;continue;else if(functionk='r'&&functionk!=' ')/ MessageBox("right();");/ 向右CFile file4("right.txt",CFile:modeRead); char *pBufright;DWORD dwFileLenright; dwFileLenright=fil
44、e4.GetLength(); pBufright=new chardwFileLenright+1; pBufrightdwFileLenright=0; file4.Read(pBufright,dwFileLenright); file4.Close();funm+=pBufrightm;func+=pBufright;k+;continue;/ 返回CFile file5("return.txt",CFile:modeRead); char *pBufreturn;DWORD dwFileLenreturn; dwFileLenreturn=file5.GetLen
45、gth(); pBufreturn=new chardwFileLenreturn+1; pBufreturndwFileLenreturn=0; file5.Read(pBufreturn,dwFileLenreturn); file5.Close();func+=pBufreturn;GetEditCtrl().SetWindowText(func);遍历功能的实现创建一个对话框,双击后会有提示创建对话框类的提示, 在该提示对话框中填写 类名,下边会显示该类所在头文件(如果类名以C开头,则该类对应的头文件名 字会自动省略C),现对话框类名定义为CDLG在菜单栏中添加一个菜单项,将其属性总的
46、 Pop_up选项去掉。将其ID定义为 IDS_MAP,Caption 定义遍历。在该按钮响应函数的类中中添加头文件: #include “ CD L G.h ”。在其 AppWizard 的视图类的函响应函数中添加以下代码CDLG dialog/定义一个对话框对象;dialog.DoModal();将对话框以模式对话框显示出来在对话框动态添加编辑框按钮等控件。定义全局变量:CStri ng show,code="mai n()rn",ccode,mcode;/定义一个公共变量的字符串在按钮的 App Wizard 的响应函数中分别添加响应代码。例如向前按钮/读入前进列表文
47、件内容CFile file1("go.txt",CFile:modeRead);char *pBufgo;DWORD dwFileLengo;dwFileLengo=file1.GetLength();pBufgo=new chardwFileLengo+1;pBufgodwFileLengo=0;file1.Read(pBufgo,dwFileLengo);/读出前进机器代码文件CFile file7("前进寻迹.txt",CFile:modeRead);char *pBufgom;DWORD dwFileLengom;dwFileLengom=fil
48、e7.GetLength();pBufgom=new chardwFileLengom+1;pBufgomdwFileLengom=0;file7.Read(pBufgom,dwFileLengom);/MessageBox(pBufgo);file7.Close();ccode+=pBufgo;/对汇编代码串接mcode+=pBufgom;对机器语言代码串接 show=show+"直线->"/记录按钮显示顺序 code=code+"line()rn"对 C 语言代码串接CEdit* edit1=(CEdit*)GetDlgItem(IDC_EDI
49、T1);/ 得到编辑框指针 edit1->SetWi ndowText(show);/将点击的按钮显示在编辑框中 显示按钮只需调用获得编辑框指针函数和在编辑框中显示字符串的函数显示相 应语言的字符串即可。开始和结束按钮需要在汇编语言和机器语言代码中添加主函数代码和返回函数 代码。清除按钮将个字符串变量设置为空。 并且调用在对话显示函数在对话框中显示为 空。保存按钮需要调用保存相关函数CFileDialog fileDlg(false);fileDlg.m_ofn.lpstrTitle=" 我的文件存储为 "/ 改变对话框名字 fileDlg.m_ofn.lpstrFi
50、lter="Text Files(*.txt)0*.txt0All File(*.*)0*.*00"/ 过滤 器作用fileDlg.m_ofn.lpstrDefExt="text"/ 设置缺省文件名 if(IDOK=fileDlg.DoModal()CFile file(fileDlg.GetFileName(),CFile:modeCreate |CFile:modeWrite); file.Write(code,strlen(ccode);file.Close(); 其他功能的实现 工具栏一个按钮的添加编写 在工具中的 resource 中双击 To
51、olbar 中的一个空的按钮,编写其 ID ,其值将与 某个菜单项ID相同,然后绘制按钮标识即可。将按钮的ID改为菜单项的ID,则 该按钮功能与相应的菜单项功能相同。在状态栏中提示框 (最左边) 添加一个可以显示当前鼠标在窗口内的位置 (x,y) 在 view 中添加一个鼠标移动的消息响应函数 OnMouseMove() 在该函数中添加如下代码void CStyleView:OnMouseMove(UINT nFlags, CPoint point) / 在状态栏的最 左边显示鼠标的当前位置/ TODO: Add your message handler code here and/or ca
52、ll default CString str;str.Format("x=%d,y=%d",point.x,point.y);GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindow Text(str);CView:OnMouseMove(nFlags, point); 用同样的方法我们也可以得到当前窗口光标的位置 在VEIW中添加一个KEYUP肖息响应函数,只需添加同样的代码即可动态图标的实现 首先在工程目录下的 res 文件添加三个 .ico 的图标 /在框架类中增加一个HICON!勺变量
53、数组m_hlcon3;在框架类中的 CMainFrame:CMainFrame()添加 用三种方式得到句柄并加载图标 m_hIcons0=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON 1);/ 加载载图标 m_hIcons1=LoadIcon(theApp.m_hInstance,MAKEINTRESOURCE(IDI_ICON2);/ 需要将 theApp 在框架类中声明为全局变量m_hIcons2=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_IC ON3
54、);SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons0); / 设置初始图标/ 设置定时器SetTimer(1,1000,NULL);设置一个一秒钟发生一次的时钟 在框架类中添加一个时钟消息处理函数并且添加以下代码static int index=1;/ 设置静态变量,避免每次时钟发生时重新赋值 SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIconsindex); index=+index%3;/ 即在每秒中该边图标一次菜单项的添加和相应响应事件程序的编写在Resources中的Menu中动态添加菜单项。注意菜单没有ID
55、,如果想给菜单设 置ID需要将其属性中的Pop_up取消。MFC框架类中有框架类(CMainFrame), 应用程序类(APP),文件类(Doc)和视图类(View)等四个基础类。在使用 ClassWizzard是选择Comma nd后,选择其中响应事件的类。这四个类响应事件 的顺序为view->Frame->Doc->应用程序类。注意视图类覆盖在框架类之上。在状态栏中显示一个进度栏 在状态栏中先添加一个形态的字符串。过程如下在 CMainFrame()函数 static UINT indicators数组中 添加 IDS_TIMER (个已 经在字符串资源中定义的字符串数组
56、的 ID) , 首先要添加一个自定义的消息响应将自动生成的状态栏(m_StatusBar)的范围改为公用类型(public)在 Frame类中定义一个消息#define UM_PROGRESS WM_USER+1消息响应函数原型的声明 afx_msg void OnProgess();消 息 映 射 ( CMianFrame() 函 数 中 ) 添 加 ON_MESSAGE(UM_PROGRESS,OnProgess)消息响应函数的实现部分void CMainFrame:OnProgess()CRect rect;m_wndStatusBar.GetItemRect(2,&rect);
57、m_progress.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH 光滑,rect,&m_wn dStatusBar,123);/水 平的进度栏/m_progress.Create(WS_CHILD|WS_VISIBLE|PBS_VERTICAL,CRect(100,100,120,200),this,123);垂直进度栏m_progress.SetPos(50);在 CMainFrame:OnCreate(LPCREATESTRUCT IpCreateStruct)中添加消息发送函 数 PostMessage(UM_PROGRESS);(不是 /SendMessa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育器材买卖合同:2024标准版一
- 2025年度医疗资源共享与协作合同范本
- 2025版智能化塔机租赁与远程监控服务合同3篇
- 2025年度体育用品购销合同协议书回款期标准范本
- 住宅销售代理合同范本2024年版版B版
- 2025年度智能医疗设备股权整体转让与市场销售合同
- 2025年度工业地产租赁合同二零二五年度示范文本
- 2025年股权质押合同范本:为上市公司股权质押提供法律保障
- 2025年度婚礼化妆团队综合服务合同
- 2025年度黄豆有机种植认证服务合同规范
- 春季开学安全第一课
- 课题申报书:数智赋能高职院校思想政治理论课“金课”实践路径研究
- H3CNE认证考试题库官网2022版
- 感统训练培训手册(适合3-13岁儿童)
- 牛客:2024年智能制造校园招聘白皮书
- 新入职消防员考核试卷题库(240道)
- 海员的营养-1315医学营养霍建颖等讲解
- 2023年广东省招聘事业单位人员考试真题及答案
- 幼儿平衡车训练课程设计
- 梁山伯与祝英台小提琴谱乐谱
- 我国全科医生培训模式
评论
0/150
提交评论