




免费预览已结束,剩余7页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计课程设计设计说明书模拟机械时钟起止日期: 2009年 6 月 8 日 至 2009年 6 月 16 日学生姓名胡海涛班级计算机072班学号07408100225成绩指导教师(签字)计算机与通信学院2009年 6月16 日目 录1、课程设计任务书2、课程设计报告3、附:部分源代码 课程设计任务书2008 2009 学年第 2 学期 计算机与通信学院 学院(系、部) 计算机科学与技术 专业 计算机072班 班级课程名称: C+面向对象程序设计 设计题目: 模拟机械时钟 完成期限:自 09 年 6 月 8 日至 09 年 月 16 日共 1 周内容及任务一、设计的主要技术参数在对机械时钟的开发的过程中,用到了面向对象程序设计的主要思想,以Visual C+6.0集成开发环境为基础,用windows编程的思想和知识对系统进行可视化的开发,主要用到了基于对话框的应用程序的界面的开发,通过创建区域与设置区域得到位图界面。通过TinyXML解析器读取与存储配置。二、设计任务首先是对系统进行分析,通过分析程序要实现哪些功能,设计出合理的程序设计算法,然后在VC中再确定需要开发的程序是多文档,单文档还是基于对话框的,通过在ResourceView中对Dialog中的界面中添加程序所要的控件,并对其进行合理的布局,并设置相应的属性,最后是进行代码的编写,通过设计出来的算法,对相应的控件进行函数的编写,在机械时钟的编写中主要用到了void CClockDlg:SetBitmapRegion(UINT nIDResource),和void CClockDlg:PlaneInterleaving( )这两个函数来进行窗体的绘制,分别进行的是窗体的切割与位图的贴图。用到Cconfig类来进行XML文件的读取和存储,用到Coption类来进行选项的设置。在编写代码的过程中还要对程序中出现的语法错误和逻辑错误进行修改,并达到了当初构思时程序所要实现的功能,并且对程序中的重点进行了注释,这对程序的修改和扩充提供了很好的条件,也让别人很容易看懂。我们组有三个成员,任务分工分别是:组长:胡海涛:主框的编写及调试,其中包括托盘,指针,主界面等。组员:岳平安:选项框的编写及调试,包括时区,颜色,设置时间等。组员:张冰:配置类的编写及调试,包括配置文件的读取与存储。三、设计工作量 本次系统从构思、设想、分析、编码的整过过程大概用了一周左右的时间,前面的三天天主要进行的是熟悉VC环境的使用和对程序的功能进行分析,设计出相应的算法,后面的四五天主要进行的是程序的界面的制作和规划,以及程序功能函数的编写,并对程序中中出现的bug不断进行修改和调试,最后一天主要是答辩,并对程序进行功能作进一步的修正和构思,使程序更完善。 进度安排起止日期工作内容2009-6-8到2009-6-10熟悉VC+开发环境2009-6-11到2009-6-12对所要开发的系统进行分析和设计2009-6-13到2009-6-15对系统进行编写代码、调试、运行2009-6-16进行答辩,对系统进行优化、完善主要参考资料C+面向对象程序设计谭浩强深入浅出MFC候捷Visual C+深入详解孙鑫指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日7课程设计报告院(系):计算机与通信学院 专业:计算机科学与技术班 级计07二班姓 名胡海涛学号07408100225指导教师彭召意课题名称模拟机械时钟课 题 描 述这次课程设计的目的和任务就是用Visual C+6.0编写出一个面向对象且基于MFC的C+应用程序,本课题是用VC+开发具有一般功能的模拟时钟程序,在VC+中用MFC编写一个基于对话框的Windows的应用程序,不仅让我加深对C+面向对象编程的概念的理解,而且让我熟悉了Windows下MFC程序的编写。该程序主要可分为三大块:主程序块,配置文件块与选项块。主程序块中主要用到窗体区域的创建与贴图函数,还有取消其在任务栏的显示,将其显示在托盘,并响应托盘的右键点击等 ;配置文件在这里采用XML文件格式,相比于ini文件格式,XML文件的读取速度更快,语法更严,更利于存储配置信息。选项块主要完成选项对话框的创建,初始化及保存到临时的配置类中。主块的贴图采用CreateRoundRgn产生一个圆形或椭圆形的区域,用SetWindowRgn设置区域,再自行贴图上去,而配置文件采用TinyXML进行解析,选项与主窗的信息交换是通过配置类进行的。设计环境(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C+6.0。问 题 的 解 决 方 案为了显示出位图窗口首先得有一幅与外边框相切的位图,将其添加到资源后利用其ID标识载入到一个CBitmap中,再自行定义一个函数产生一个区域供窗体显示。设置一个定时器每过一秒就发送一次绘制窗体的消息,利用三角函数算法算出角度进行各个指针的显示。以下为程序运行时的截图:本程序主要分为三个大的模块:主类,配置类和选项类。其中我主要负责主类功能的实现和主类与其它类之间的调用。 主类中SetBitmapRegion的函数定义为:void CClockDlg:SetBitmapRegion(UINT nIDResource)m_bmp.DeleteObject();m_bmp.LoadBitmap(nIDResource);m_bmp.GetBitmap(&m_bmpInfo);/按位图信息创建圆形区域HRGN hRgn = CreateRoundRectRgn(0, 0, m_bmpInfo.bmWidth,m_bmpInfo.bmHeight, m_bmpInfo.bmWidth, m_bmpInfo.bmHeight);SetWindowRgn(hRgn, true);/计算出中心点m_xCenter = m_bmpInfo.bmWidth / 2;m_yCenter = m_bmpInfo.bmHeight / 2;问 题 的 解 决 方 案第一句为删除一个原有与对象已绑定的位图对象,第二句载入位图,然后利用CreateRoundRectRgn函数生成一个椭圆区域并用SetWindowRgn函数设置成窗体的区域。计算出中心点供后面调用。该程序具有托盘图标,通过设置NOTIFYICONDATA结构体的参数来实现。具有右键菜单,通过LoadMenu和TrackPopupMenu来实现。在OnInitDialog中调用ModifyStyleEx去掉任务栏中存在的图标,调用SetBitmapRegion生成圆形区域,再增加一个定时器用来绘制各个指针。结 论该程序是一个功能较为完善的模拟机械时钟程序,主界面采用新颖的图片做为界面,配置文件则采用性能较好的配置文件流行格式XML文件,利用体积小,速度快,易使用的TinyXML做解析器。本次C+课程设计使我更深刻认识了面向对象编程,也加深了我对Windows环境下编程的熟悉度,在不断的调试与排错中,我提高了我的编程及调试能力。学会了一些课本上没有讲的东西,提高了编程的整体水平。受益匪浅。评 分部分源代码:void CClockDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCClientDC dc(this);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap *pOldBmp = dcMem.SelectObject(&m_bmp);/贴图片dc.BitBlt(0, 0, m_bmpInfo.bmWidth, m_bmpInfo.bmHeight, &dcMem, 0, 0, SRCCOPY);dcMem.SelectObject(pOldBmp);double nRadHour, nRadMin, nRadSec;CTime time = CTime:GetCurrentTime();/分别计算出时针与分针,秒针的弧度nRadHour = time.GetHour() + m_config.m_nTimeZone+ time.GetMinute()/60.0 + time.GetSecond()/3600.0;nRadHour *= 6.2832 / 12.0;nRadMin = time.GetMinute() + time.GetSecond()/60.0;nRadMin *= 6.2832 / 60.0;nRadSec = (float)time.GetSecond();nRadSec *= 6.2832 / 60.0;/创建时针CPen penHour(PS_SOLID,8, m_config.m_clrHour);dc.SelectObject(&penHour);dc.MoveTo(m_xCenter, m_yCenter);dc.LineTo(m_xCenter + (int)(sin(nRadHour)*(m_xCenter * 0.7),m_yCenter - (int)(cos(nRadHour)*(m_yCenter * 0.7);/创建分针CPen penMin(PS_SOLID, 5, m_config.m_clrMin);dc.SelectObject(&penMin);dc.MoveTo(m_xCenter, m_yCenter);dc.LineTo(m_xCenter + (int)(sin(nRadMin)*(m_xCenter * 0.85),m_yCenter - (int)(cos(nRadMin)*(m_yCenter * 0.85);/秒针CPen penSec(PS_SOLID, 1, m_config.m_clrSec);dc.SelectObject(&penSec);dc.MoveTo(m_xCenter, m_yCenter);dc.LineTo(m_xCenter + (int)(sin(nRadSec)*(m_xCenter * 0.9),m_yCenter - (int)(cos(nRadSec)*(m_yCenter * 0.9);CDialog:OnPaint();void CClockDlg:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default/通过发消息实现鼠标任何地方点击移动PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y);CDialog:OnLButtonDown(nFlags, point);void CClockDlg:OnRButtonDown(UINT nFlags, CPoint point) / 右键的弹出菜单CMenu menu;menu.LoadMenu(IDR_MENU_POPUP);CMenu *pMenu = menu.GetSubMenu(0);ClientToScreen(&point);pMenu-TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);CDialog:OnRButtonDown(nFlags, point);LRESULT CClockDlg:WindowProc(UINT message, WPARAM wParam, LPARAM lParam) / TODO: Add your specialized code here and/or call the base class/托盘的影响在这里添加if (UM_NOTIFYICON = message)if (WM_LBUTTONDBLCLK = lParam)ShowWindow(SW_SHOW);else if (WM_RBUTTONDOWN = lParam)CMenu menu;/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护士进修工作总结:多脏器衰竭护理查房
- 文物保护工作指南解读
- 护理质量与安全总结
- 气切半堵管的护理
- 护理教学过程与原则
- 脑梗行为异常患者护理
- 消防验收工作总结培训版
- 物业核算会计年终工作总结
- 2025工程咨询居间合同协议书范本
- 腹膜透析相关性腹膜炎护理
- 电气工程及其自动化专业导论
- 《心肺复苏操作》课件
- 部编人教版四年级语文下册《全册课件》完整版
- 三减三健健康知识讲座课件
- 小学科学大象版六年级上册第一单元《不一样的“感冒”》教案
- 市政有限空间作业方案(清理检查井、顶管)
- 在LabVIEW中利用ActiveX读取Excel数据
- 胸痛单元建设汇报(自行添加医院照片)
- 如愿二声部合唱简谱文档
- GB/T 3452.5-2022液压气动用O形橡胶密封圈第5部分:弹性体材料规范
- GB/T 6075.1-2012机械振动在非旋转部件上测量评价机器的振动第1部分:总则
评论
0/150
提交评论