课程设计--指针式时钟.doc_第1页
课程设计--指针式时钟.doc_第2页
课程设计--指针式时钟.doc_第3页
课程设计--指针式时钟.doc_第4页
课程设计--指针式时钟.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XX大学课程设计说明书学生姓名: 学 号: 学 院: 专 业: 题 目: 指针式时钟 指导教师: 职称: 2013 年 1 月 11 日XX大学课程设计任务书 12/13 学年第 一 学期学 院: 专 业: 学 生 姓 名: 学 号: 题 目: 指针式时钟 起 迄 日 期: 课程设计地点: 指 导 教 师: 系 主 任: 下达任务书日期: 2012年12月24日课 程 设 计 任 务 书1设计目的:综合应用VC+的各种编程知识和技巧进行程序设计的能力,最终掌握面向对象的编程技术。通过本次课程设计,培养自主学习和独立创新能力。2设计内容和要求(包括原始数据、技术参数、条件、设计要求等):功能说明:使用计时器创建一个时钟。(1)计时器是程序中最常用的后台任务机制之一,其时间间隔最低约55毫秒,被广泛用于时钟、磁盘备份程序或需要在某一时刻运行的程序等。 (2)多媒体计时器能编程设定1毫秒或者更小,它是诸如MIDI序列发生器之类的专用型应用程序的理想选择,在Windows API中有很多查询时钟的函数,利用它们就可以编写出高精度的计时器。设计方案:程序所实现的功能:运行界面是一指针式时钟,有时分秒三个指针,有12个钟点数字的显示,并通过指针的转动来实现时间的更新。设计分析: 了解两个函数:CWnd:SetTimer()函数用来设置一个计时器以指定的时间间隔触发,CWnd:KillTimer()函数用来使一个正在运行的计时器停止。建立一个MFC单个文档应用程序工程;打开MFC ClassWizard,为1view类添加OnCreate和Ontimer函数,在视图类中添加3个方法:编辑OnCreate方法的代码,用来设置时钟。编辑OnTimer方法用来更新窗口。编辑OnDraw方法的代码,实现绘制时钟。创建视图消息处理函数,初始化计时器,通过一个计时器消息,使视图一秒发送一次消息,以保证时间的准确性。计时器消息处理函数。流程图如下:开始 绘制椭圆 绘制钟点 绘制时钟、分钟、秒钟针 初始化计时器 计时器处理 结束。3设计工作任务及工作量的要求包括课程设计计算说明书(论文)、图纸、实物样品等:本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、菜单命令、对话框、画笔/画刷、显示文字等。指针运动算法和屏幕重绘方法是本程序主要难点所在。不论何种指针,每次转动均以/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。计算指针端点(x, y)的公式如下:x =圆心x坐标 + 指针长度 * cos (指针方向角)y =圆心y坐标 + 指针长度 * sin (指针方向角)注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。(1) OnDraw()函数实现对系统时间的获取和绘制椭圆表面和时钟指针。(2) 设置计时器,创建窗口时启动一个计时器不断发出WM_TIMER消息,调用SetTimer()函数。(3) 用TextOut()函数显示数字钟。(4) 添加菜单,用菜单项控制弹出对话框设置显示的时间。课 程 设 计 任 务 书4主要参考文献:Visual C+课程设计案例精编Visual C+程序设计基础与实例分析 ,朱晴婷,黄海鹰,陈莲君,清华大学出版社。Visual C+6.0开发技巧与实例教程 ,同志工作室,人民邮电出版社。Visual C+6.0面向对象程序设计教程 ,刘瑞新,机械工业出版社。5设计成果形式及要求:程序运行结果;课程设计说明书。6工作计划及进度:2012年12月24日 2012年12月 28 日:查资料 2012年12月29日 2013年1月 3日:在指导教师指导下设计方案及程序2013年1月 4日 2013年1月8日:学生上机调试程序,指导教师辅导2013年1月 9日 2013年1月11日:完成课程设计说明书2013年1月11日:答辩系主任审查意见: 签字: 年 月 日目录摘要.1关键词.2设计目的、意义.3设计内容.4结果分析.5设计心得.6参考文献.7运行结果.8摘要:计时器是程序中最常用的后台任务机制之一,其时间间隔最低约55毫秒,被广泛用于时钟、磁盘备份程序或需要在某一时刻运行的程序等。而模拟时钟是一种集计时器和时钟显示于一体的程序。以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个指针式时钟程序,此程序在屏幕正中有一个指针式钟面。指针式的时钟表盘为椭圆形或圆形,并且圆周上有分布均匀的12个刻度,刻度要求显示清晰,钟面上有长度和颜色及粗细各不相同的指针,即时针、分针、秒针,以便各个指针重合时亦可以轻易辨认,指针的运动要求具有规律性,且为顺时针。关键词:指针式时钟设计目的、意义:综合应用VC+的各种编程知识和技巧进行程序设计的能力,最终掌握面向对象的编程技术。通过本次课程设计,培养自主学习和独立创新能力。设计内容:(正文)void CMy2View:OnDraw(CDC* pDC)CMy2Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereRECT Rect;GetClientRect(&Rect);/计算椭圆中心位置int CenterX=Rect.right/2;int CenterY=Rect.bottom/2;CTime Time=CTime:GetCurrentTime();CString str;int i,x,y;CSize size;/创建一支画笔,用来画椭圆CPen Pen(PS_SOLID,5,RGB(0,0,0);/设置当前画笔,并记下以前的现笔CPen *OldPen=pDC-SelectObject(&Pen);/绘制钟面椭圆pDC-Ellipse(5,5,Rect.right-5,Rect.bottom-5);double Radians;/设置字体pDC-SetTextColor(RGB(255,0,0);for(i=1;iGetTextExtent(str,str.GetLength();Radians=(double)i*6.28/12.0;/计算钟点放置的位置x=CenterX-(size.cx/2)+(int)(double)(CenterX-20)*sin(Radians);y=CenterY-(size.cy/2)-(int)(double)(CenterY-20)*cos(Radians);/绘制钟点pDC-TextOut(x,y,str);/计算时钟指针的夹角Radians=(double)Time.GetHour()+(double)Time.GetMinute()/60.0+(double)Time.GetSecond()/3600.0;Radians*=6.28/12.0;/创建时钟指针画笔CPen HourPen(PS_SOLID,5,RGB(100,200,100);pDC-SelectObject(&HourPen);/绘制时钟指针pDC-MoveTo(CenterX,CenterY);pDC-LineTo(CenterX+(int)(double)(CenterX/3)*sin(Radians),CenterY-(int)(double)(CenterY/3)*cos(Radians);Radians=(double)Time.GetMinute()+(double)Time.GetSecond()/60.0;Radians*=6.28/60.0;/创建分钟指针画笔CPen MinutePen(PS_SOLID,3,RGB(0,0,255);pDC-SelectObject(&MinutePen);/绘制分钟指针pDC-MoveTo(CenterX,CenterY);pDC-LineTo(CenterX+(int)(double)(CenterX*2)/3)*sin(Radians),CenterY-(int)(double)(CenterY*2/3)*cos(Radians);Radians=(double)Time.GetSecond();Radians*=6.28/60.0;/创建秒钟指针画笔CPen SecondPen(PS_SOLID,1,RGB(0,25,0);pDC-SelectObject(&SecondPen);/绘制秒钟指针 pDC-MoveTo(CenterX,CenterY);pDC-LineTo(CenterX+(int)(double)(CenterX*4)/5)*sin(Radians),CenterY-(int)(double)(CenterY*4)/5*cos(Radians);pDC-SelectObject(OldPen);/ TODO: add draw code for native data herevoid CMy2View:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultInvalidateRect(NULL,true); UpdateWindow();CView:OnTimer(nIDEvent);int CMy2View:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CView:OnCreate(lpCreateStruct) = -1)return -1;/ TODO: Add your specialized creation code hereSetTimer(1,1000,NULL);return 0;结果分析:计时器消息不是和其他消息异步处理的,计时器不会中断另一个非计时器消息。另外,计时器编程所设定的时间间隔并不是精确值,因为计时器所基于的硬件计时器每54.9秒“滴答”一次,Windows将把计时值舍入到下一个55毫秒的倍数。设计心得:通过本次课程设计更加意识到提高编程能力关键是要多多实践,读书是为了代码打基础,但只读书不敲代码是不可能提高实际的编程能力的。只有多读源码,多写代码,多思考才能对知识有更加深刻的了解。参考文献:Visual C+课程设计案例精编Visual C+程序设计基础与实例分析 ,朱晴婷,黄海鹰,陈莲君,清华大学出版社。Visual C+6.0开发技巧与实例教程 ,同志工作室,人民邮电出版社。Visual C+6.0面向对象程序设计教程 ,刘瑞新,机械工业出版社。运行结果:总程序/ 2View.cpp : implementation of the CMy2View class/#include math.h#include stdafx.h#include 2.h#include 2Doc.h#include 2View.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMy2ViewIMPLEMENT_DYNCREATE(CMy2View, CView)BEGIN_MESSAGE_MAP(CMy2View, CView)/AFX_MSG_MAP(CMy2View)ON_WM_TIMER()ON_WM_CREATE()/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CMy2View construction/destructionCMy2View:CMy2View()/ TODO: add construction code hereCMy2View:CMy2View()BOOL CMy2View:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CMy2View drawingvoid CMy2View:OnDraw(CDC* pDC)CMy2Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereRECT Rect;GetClientRect(&Rect);/计算椭圆中心位置int CenterX=Rect.right/2;int CenterY=Rect.bottom/2;CTime Time=CTime:GetCurrentTime();CString str;int i,x,y;CSize size;/创建一支画笔,用来画椭圆CPen Pen(PS_SOLID,5,RGB(0,0,0);/设置当前画笔,并记下以前的现笔CPen *OldPen=pDC-SelectObject(&Pen);/绘制钟面椭圆pDC-Ellipse(5,5,Rect.right-5,Rect.bottom-5);double Radians;/设置字体pDC-SetTextColor(RGB(255,0,0);for(i=1;iGetTextExtent(str,str.GetLength();Radians=(double)i*6.28/12.0;/计算钟点放置的位置x=CenterX-(size.cx/2)+(int)(double)(CenterX-20)*sin(Radians);y=CenterY-(size.cy/2)-(int)(double)(CenterY-20)*cos(Radians);/绘制钟点pDC-TextOut(x,y,str);/计算时钟指针的夹角Radians=(double)Time.GetHour()+(double)Time.GetMinute()/60.0+(double)Time.GetSecond()/3600.0;Radians*=6.28/12.0;/创建时钟指针画笔CPen HourPen(PS_SOLID,5,RGB(100,200,100);pDC-SelectObject(&HourPen);/绘制时钟指针pDC-MoveTo(CenterX,CenterY);pDC-LineTo(CenterX+(int)(double)(CenterX/3)*sin(Radians),CenterY-(int)(double)(CenterY/3)*cos(Radians);Radians=(double)Time.GetMinute()+(double)Time.GetSecond()/60.0;Radians*=6.28/60.0;/创建分钟指针画笔CPen MinutePen(PS_SOLID,3,RGB(0,0,255);pDC-SelectObject(&MinutePen);/绘制分钟指针pDC-MoveTo(CenterX,CenterY);pDC-LineTo(CenterX+(int)(double)(CenterX*2)/3)*sin(Radians),CenterY-(int)(double)(CenterY*2/3)*cos(Radians);Radians=(double)Time.GetSecond();Radians*=6.28/60.0;/创建秒钟指针画笔CPen SecondPen(PS_SOLID,1,RGB(0,25,0);pDC-SelectObject(&SecondPen);/绘制秒钟指针 pDC-MoveTo(CenterX,CenterY);pDC-LineTo(CenterX+(int)(double)(CenterX*4)/5)*sin(Radians),CenterY-(int)(double)(CenterY*4)/5*cos(Radians);pDC-SelectObject(OldPen);/ TODO: add draw code for native data here/ CMy2View printingBOOL CMy2View:OnPreparePrinting(CPrintInfo* pInfo)/ default preparation /这个函数是doc/view结构的MFC程序中固有的,用来为绘制做准备,无需要自己调用, /当MFC程序运行时,系统自动调用当返回1时表明开始绘制,0时告诉系统绘制被取消return DoPreparePrinting(pInfo);void CMy2View:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论