




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows程序设计
实践报告BY:08级空间信息与数字技术60020马腾目录TOC\o"1-5"\h\z\o"CurrentDocument"任务一:Windows消息循环机制及API程序设计实践 3\o"CurrentDocument"一、 实践目的 3\o"CurrentDocument"二、 任务概述 3\o"CurrentDocument"三、 windows消息循环 3\o"CurrentDocument"四、 学习收获 3\o"CurrentDocument"任务二:基于MFC的对话框程序设计 4\o"CurrentDocument"一、 任务概述 4\o"CurrentDocument"二、 MFC消息映射 4\o"CurrentDocument"三、 计算器程序的设计思路 4\o"CurrentDocument"四、 遇到困难及解决 5\o"CurrentDocument"五、 关键代码 5\o"CurrentDocument"六、运行情况 6\o"CurrentDocument"七、收获 6\o"CurrentDocument"任务三:基于MFC的单文档绘图程序设计 7\o"CurrentDocument"一、 任务概述 7\o"CurrentDocument"二、 模块设计及封装 7\o"CurrentDocument"三、 设计的优点 8\o"CurrentDocument"四、 程序风格 8\o"CurrentDocument"五、 运行情况 8六、使用方式 9\o"CurrentDocument"七、困难及解决 12任务一:Windows消息循环机制及API程序设计实践一、实践目的通过实践充分理解Windows的消息循环机制,了解Windows的API函数族的分类及大致功能,并在此基础上了解基本WindowsAPI方式开发的窗口程序的基本过程。任何框架开发环境归根结底都是对WindowsAPI函数的封装与调用。在利用一个框架环境开发Windows程序的过程中,应该明白所使用的框架模块调用了WindowsAPI中的那些功能函数。二、 任务概述用visualC++开发一个Win32窗口程序,并实现如下功能:实现菜单功能;点击某两个菜单可在主窗口中显示或清除文字(文字内容不做要求);点击某个菜单可弹出一个自定义的对话框(对话框中的元素不做要求),单击对话框中的“确定”或“取消”按钮,可结束对话框。三、 windows消息循环Windows多进程的窗口图形操作系统与DOS操作系统最大的区别就是:DOS采用顺序执行的过程,而Windows采用事件的消息驱动。用户进行的鼠标操作,键盘输入等操作和各个应用程序之间,应用程序和系统之间的操作都作为一个事件,产生消息,进入到指定的消息队列中,等待取出进行处理。这打破了顺序执行,而采用事件驱动的形式。四、学习收获了解了Windows的消息循环机制了解了一个窗口程序的生存的始末,从窗口类的定义,注册窗口类,创建窗口,到程序运行的消息循环的主函数。3•了解了句柄的概念,每个菜单项,窗口都有一个句柄作为自己的标示,作为消息的一部分,告诉系统处理哪个窗口,菜单项的消息。4.了解了一些简单的API:CheckMenuItem,DialogBox等。5•了解了消息分类,处理消息的函数里,将消息分为了WM_COMMAND、WM_PAINT等分别处理窗口命令、窗口的绘制等消息。以及他们之间的关系。任务二:基于MFC的对话框程序设计一、任务概述用MFC开发一个计算器程序:对话框类型的程序;能够实现浮点数值的加减乘除运算;界面由一个编辑框和若干按钮组成,编辑框负责表达按钮输入及计算的结果,按钮负责输入数字、加减乘除以及等于等动作的输入;程序的核心功能由标准C++方式实现,并通过MFC框架代码调用其功能;二、MFC消息映射方法:在MFC的类库中有些事继承了CCmdTarget类的类,这些类和消息有关,可以处理消息。然后为每一个能处理消息的类建立一个消息映射表,就像一张MessageMap,将消息和表格中的元素比较,然后调用对应的处理程序,这种操作就叫消息映射。其中消息映射表的建立使用了几个定义好的宏实现的。DECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP(theClass,baseClass)ON_COMMAND(id,memberFxn)END_MESSAGE_MAP()来实现对DECLARE_MESSAGE_MAP定义的结构体的填写。消息表条目就以ON_COMMAND(id,memberfxn)的格式宏定义不同类型的消息,其中对应消息的句柄,memberfxn表示消息引发的要处理的函数。将要实现的消息写在BEGIN_MESSAGE_MAP与END_MESSAGE_MAP之间。然后再编写消息实现的动作在对应的memberfxn函数中。优点:可以使代码更有条理,要实现的具体功能函数写在一个单独的函数中。三、计算器程序的设计思路1•确定实现计算功能类的具体结构,需要的成员变量,成员函数等在MFC中实现计算器程序的UI为UI中的按钮添加事件,并到调用C++功能类中的函数。调试程序,修改BUG四、遇到困难及解决对于小数点等符号的处理,输入一个小数点后,不允许再输入,用了一个textl的标识符进行判断。其他符号的重复输入等。也是利用了定义的变量进行控制texti和text2进行对加减乘除和等号的控制。五、关键代码□classCore{private:doubleConstzrl;doubleConsintSymb;doubleresult;public:voidseiidSynib(iii二Syml?);vcidsendConatrl(char水Constrl);vcidsendConstr2@h已丫*Constr2};doubleCompute:public:''"Core(void):h功能类声明的成员函数和属性内容,其中constr1constr2分别储存两个操作数,symb储存符号,result存结构。外部通过三个send开头的函数传递参数。Compute是计算函数,其中通过一个switch判断Symb是哪种类型,执行相应的计算语句。□voidCTask2Dlg::NumO^uttonO{//TODO:在此添加控件通知处理程序代码strcat(Constr23丹0">;SetD1g11emText(IDC_STATIC7Constr2);实现了ui上的即使更新。3voidCTaskSDlg::SvmbAddO{"TODO:在此添加控件通知处理程序代码while(TEXTI<l){thecore.sendCons.tfl(Constr2);thecore.sendSynib(l);毗rcpv(Cons;TEXTI—;TEXT2=0;TEXT1=0;在输入符号时表示一个操作数的输入完成,所以调用sendconstr方法把参数传入。同时在输入符号时要判断,是否之前已经连续输入过。通过text来控制。六、运行情况由于之前是按照实际的计算器来设计的,没有参照windows里的计算器程序,所以没有设计连乘,连减等功能。由于之前忘记了考虑负号的问题,所以之后的设计可以用减号来代替负号。七、收获了解到了MFC中消息映射的实现机制,和如何写消息实现的具体函数,如何修改消息映射表。通过这次的程序设计体会到了程序设计之初算法设计的重要性,由于之前没有很好的考虑算法,以至于到后面的编写,修改十分的困难,特别是在符号的重复输入,用户的异常处理这一方面,程序应有很大的改进。虽然很多的BGU最后克服了,但是代码看起来很乱,使用的标识符有时自己也无法分辨。所以在以后的程序设计中一定会注意做好第一步的设计,不会再盲目的拿来题目就写。争取在设计之初就把所有可能出现的情况都考虑全面。任务三:基于MFC的单文档绘图程序设计一、任务概述用MFC开发一个单文档的绘图程序:通过鼠标左键的点击在视图中绘制不同的图形,可绘制的图形包括折线、多边形,并且折线的线宽、颜色以及线形都是可以改变的,多边形的填充方式也可以定制;绘制的图形可以以保存为矢量(矢量格式自定义)文件,并且可以在程序中再次打开,矢量数据的线宽、线形、颜色以及填充模式都要保存在矢量数据文件中,重新打开的矢量数据文件应该是可以再次编辑、修改的。、模块设计及封装1•绘制模块:包括动态绘制方法和绘制方法。其中动态绘制是实现鼠标移动期间的动态绘制。2.存储模块:包括存储成.me文件和打开.me文件两个方法。3•图形文件格式:直线,椭圆,矩形等绘制均存储两个顶点的方式,折线。4•编辑模块:包括画笔宽度设置,画笔颜色设置,画刷颜色设置和撤销。模块的封装:三、设计的优点1•绘制等函数都采用虚函数,对于不同的图形实现各自独特的绘制函数。这样在就可以用Shape指针的数组来统一的存储图形,在绘制时动态的调用相对的函数。2•通过上边的方法很好的解决了不同的图形叠加在一起里的问题,使得最后的绘制只需要按照一个for循环的遍历就可以完成。3•绘制的功能函数与MFC框架很好的分离,功能更函数等类用的是C++的格式,其中的绘制函数用的是WindowsAPI,可以很好的实现代码的复用,在其他框架下也能使用。四、 程序风格1•有时标识符会拼音与英文混用喜欢把动态变化的东西设置为静态的成员变量代码不够简洁,喜欢把类似功能的代码COPY到另一个地方做修改,所以看起来有些乱。4•将所有自己写的类的声明写在一个总的头文件中,这样引入到MFC中比较方便5•使用指针,而忽略了引用。以后应该多使用引用,看起来比较简单。6•注释喜欢写在声明部分五、 运行情况程序可以正常的运行,完成各项功能:六、使用方式1•属性设置b〔H)绘凰雇性单击属性中的画笔颜色或者画刷颜色进行颜色属性的设置。单击属性中的画笔宽度,弹出对话框,可以滑动滚动条对宽度进行设置。2.绘图单击绘图可以选择相应的图形对齐进行绘制。编辑部分单击编辑中的撤销,可以撤回上一步,删除最顶层的图形,对于新打开的文件一样适用
单击文件中的打开或新建或询问是否保存文件选择.me格式的文件,即可打开。
库tearMEDIA(E:) 二|■匡]書名称幢改日朋Fawo-库tearMEDIA(E:) 二|■匡]書名称幢改日朋Fawo-fit制/id亡cr2010/1/1210:49irri3ge&2009/12/2&22:46JavaApplication22010/3/1319:00KwDconload2009/11/2922:42Movie2009/11/3016L2LMusic2010/2/77:54softw
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手术护士培训上岗
- 如何提高课堂管理水平
- 体检中心客服礼仪培训
- 泵站设备采购协议
- 弘扬志愿服务精神教育
- 建筑工程安全保障合同
- 数据分析支持外包合同
- 2025年统编版小学道德与法治四年级下册《买东西的学问》说课课件
- 2025年统编版小学道德与法治二年级下册《健康游戏我常玩》说课课件
- 医疗耗材销售年终工作总结
- 合伙开办教育培训机构合同范本
- 知道智慧网课《科技伦理》章节测试答案
- 项目部二级安全教育内容
- 2022年研究生复试神经外科题库
- 904L材料焊接工艺设计规程
- 下肢静脉曲张硬化治疗指南
- 博士力士乐cvf变频器使用手册
- MT_T 142-1986 煤矿井下空气采样方法_(高清版)
- 路基施工技术5:路基防护与支挡工程施工
- 小学体育课堂教学设计与教案——跨越式跳高(水平三)
- ISO9001、ISO14001、ISO45001三体系内审计划+内审检查表+内审报告
评论
0/150
提交评论