




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成都信息工程学院课程设计简易时钟显示设计薛 昊(310081002013)指导老师: 王中科 提交日期:2010-12-24 简易时钟显示设计摘 要本文讨论的是基于Visual C+ 6.0平台所设计的简易时钟显示程序。本设计使用定时器,并通过调用绘图函数,画出模拟的时钟表盘,其秒针每秒钟跳动一次。除此之外,本时钟还有整点和半点报时功能。通过本设计,我们进一步掌握Visual C+应用程序,系统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C+。关键字:Visual C+; 时钟I目 次总页数:6页1、绪论1.1 选题意义1.2 设计目标2、开发环境3、需求分析4、系统设计4.1 概要设计4.2 详细设计(1)、步骤一:创建应用程序框架。(2)、步骤二:删除不需要的菜单资源。(3)、步骤三:添加消息映射和处理函数。(4)、步骤四:定时器的创建和销毁。(5)、步骤五:定义必要的成员变量和成员函数。(6)、步骤六:编写绘制表盘和指针的代码。(7)、步骤七:添加定时器消息响应函数代码。(8)、步骤八:添加视窗大小改变时的消息响应代码。(9)、步骤九:编译运行该程序。5、测试6、结论1、绪论1.1 选题意义此设计选择意义在于引导学生学会设计简单的时钟显示窗口,进一步掌握Visual C+应用程序,系统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C+,并在此环境下设计并实现一个简易时钟显示程序。1.2 设计目标使时钟显示含有一下功能:(1)、基本功能:实现模拟时钟表盘,时针,分针以及秒针的显示。(2)、计时功能:显示当前的时间,并且秒针每秒跳动一次,分针每分钟跳动一次,时针每小时跳动一次。(3)、报时功能:时钟在整点和半点的时候具有报时的功能。2、开发环境本设计基于Microsoft Visual C+ 6.0实现的。3、需求分析该简易时钟显示程序的具体描述如下:本设计使用定时器,并通过调用绘图函数,画出模拟的时钟表盘,其秒针每秒钟跳动一次。除此之外,本时钟还有整点和半点报时功能。可以让用户实时的显示当前时间,方便快捷。4、系统设计4.1 概要设计本设计使用定时器,并通过调用绘图函数,画出模拟的时钟表盘,其秒针每秒钟跳动一次。除此之外,本时钟还有整点和半点报时功能。4.2 详细设计(1)、步骤一:创建应用程序框架。在VC开发环境中选择菜单File-New,在New对话框中选择Projects标签,从左边的列表中选择MFC AppWizard(exe),在右侧的Project Name框中输入工程名:Clock,单击OK按钮,启动MFC的应用程序向导AppWizard,在MFC AppWizard的第一步中选择“Single Document”,在MFC AppWizard的第二步和第三步均接受默认设置,在MFC AppWizard的第四步中取消工具栏、状态栏、打印与预览等特性前面的复选框,使工程不包含这些内容,在第五步仍接受默认设置,在第六步单击“finish”按钮,单击OK按钮,生成Clock工程。(2)、步骤二:删除不需要的菜单资源。选择ResourceView面板,单击加号,展开菜单资源,双击IDR_MAINFRAME菜单资源,在右侧的资源编辑器中,删除所有不需要的菜单项,只留下“文件/退出”和“帮助”菜单项,(3)、步骤三:添加消息映射和处理函数。按Ctrl+W键,打开ClassWizard,选择其中的Message Maps标签,在Class name栏中选中CClockView,在Object Ids列表框中选中CClockView,在Message列表框中选中WM_CREATE消息,单击Add Function按钮,则OnCreate函数出现在下面的成员函数列表中,再分别在Messages列表框中双击WM_DESTROY、WM_PAINT、WM_SIZE消息,添加相应的处理函数:OnDestry、OnPaint、OnSize,(4)、步骤四:定时器的创建和销毁。我们要在视窗的创建和关闭同时进行定时器的创建和销毁。在ClassWizard对话框中,从成员函数列表中选择OnCreate函数,单击Edit Code按钮,打开ClockView.cpp文件,定位到OnCreate函数的首部,向其中添加如下代码(SetTimer(1,1000,NULL);)。添加的这一行代码定义了一个标号为1的定时器,并且定时为1秒。将光标定位到OnDestroy()函数中,向其中添加如下代码(KillTimer(1);)。这句代码将在视窗关闭时销毁定时器1。(5)、步骤五:定义必要的成员变量和成员函数。选择ClassView面板,单击加号,展开该工程的类列表,双击CClockView类名,在右侧的文件编辑器中打开ClockView.h文件,在其中定义以下的保护类型成员变量。然后再定义以下公有类型的成员函数。protected:intcxClient;int cyClient;SYSTEMTIME stPrevious;BOOLfChange;CDC*pdc;HDChdc;PAINTSTRUCTps;SYSTEMTIMEst;public:void SetIsotropic(HDC hdc, int cxClient, int cyClient);void DrawClock(HDC hdc);void DrawHands(HDC hdc, SYSTEMTIME* pst, BOOL fChange);void RotatePoint(POINT pt, int iNum, int iAngle);其中SetIsotropic函数用于设置各向同性的映射模式;DrawClock函数用于绘制表盘;DrawHands函数用于画表针。RotatePoint函数用于绘制表盘上的点和表针时所必须的旋转计算,该函数要用到三角函数运算,因此需要math.h头文件的支持。(6)、步骤六:编写绘制表盘和指针的代码。在ClassView面板中单击CClockView类前面的加号,然后双击CClockView类的OnPaint()函数。在其中添加如下代码:GetLocalTime(&st);stPrevious=st;hdc=(HDC)dc;SetIsotropic(hdc,cxClient,cyClient);SelectObject(hdc,GetStockObject(BLACK_PEN);DrawClock(hdc);DrawHands(hdc,&stPrevious,TRUE);该函数进行初始化窗口的绘制,首先获取当前时间,然后调用SetIsotropic函数设置映射模式和窗口范围,调用SelectObject设置画笔,再调用DrawClock函数画表盘,最后调用DrawHands函数画指针。因此需要在该文件的后面依次添加如下的成员函数代码:一、SetIsotropic函数void CClockView:SetIsotropic(HDC hdc,int cxClient, int cyClient)SetMapMode(hdc,MM_ISOTROPIC);SetWindowExtEx(hdc,1000,1000,NULL);SetViewportExtEx(hdc,cxClient/2,-cyClient/2,NULL);SetViewportOrgEx(hdc,cxClient/2, cyClient/2,NULL);在SetIsotropic函数中,首先调用SetMapMode设置各向同性映射模式,然后将窗口范围设置为1000*1000,然后设置视图的范围和原点。二、DrawClock函数void CClockView:DrawClock(HDC hdc)int iAngle;POINT pt3;for (iAngle=0;iAnglewHour*30)%360+pst-wMinute/2;iAngle1=pst-wMinute*6;iAngle2=pst-wSecond*6;memcpy(ptTemp,pt,sizeof(pt);for(i=fChange ? 0:2; i3;i+)RotatePoint(ptTempi,5,iAnglei);Polyline(hdc,ptTempi,5);DrawHands函数负责绘制时钟的时针、分针和秒针的轮廓。首先我们定义它们垂直向上时的形状坐标,并存放在POINT结构的数组中,然后根据当前时间,通过RotatePoint函数进行旋转,并调用Polyline函数进行绘制和显示。四、RotatePoint函数void CClockView:RotatePoint(POINT pt, int iNum, int iAngle)int i;POINT ptTemp;for(i=0;iiNum;i+)ptTemp.x=(int) (pti.x*cos(PI*iAngle/360)+pti.y*sin(PI*iAngle/360);ptTemp.y=(int) (pti.y*cos(PI*iAngle/360)-pti.x*sin(PI*iAngle/360);pti=ptTemp;该函数用到三角函数运算和常量PI,因此在该文件的头部添加如下代码。#include #define PI 2*3.1415926(7)、步骤七:添加定时器消息响应函数代码。打开ClassWizar对话框,选择Message Maps标签,从Class name下拉列表中选择CClockView,从Object IDS列表中选择CClockView,在Messages列表中双击WM_TIMER,即添加了定时器消息映射,单击右侧的Edit Code按钮。在该消息的处理函数中添加如下代码:void CClockView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultInvalidate(TRUE);GetLocalTime(&st);fChange=st.wHour !=stPrevious.wHour |st.wMinute != stPrevious.wMinute;pdc=GetDC();hdc=(HDC)pdc;SetIsotropic(hdc,cxClient,cyClient);SelectObject(hdc,GetStockObject(WHITE_PEN);DrawHands(hdc,&stPrevious,fChange);SelectObject(hdc,GetStockObject(BLACK_PEN);DrawHands(hdc,&st,TRUE);ReleaseDC(pdc);stPrevious=st;if (st.wMinute=59) & (st.wSecond=55)Beep(50,5);if (st.wMinute=0) & (st.wSecond=0)Beep(200,5);OnTimer函数首先调用Invalidate(TRUE)函数使窗口重画,然后获取最新的时间。根据fChange判断是否需要重新绘制时针和分针,如果需要,则使用一个白色画笔,调用DrawHands函数擦除所有的表针,否则,仅擦除秒针,再用黑色画笔绘制所有的表针。在本函数的最后,判断是否是整点的前6秒或半点的第0秒,若是则发出鸣叫。(8)、步骤八:添加视窗大小改变时的消息响应代码。在ClassView面板中双击CClockView类的OnSize()函数。在其中添加如下代码:cxClient=cx;cyClient=cy;(9)、步骤九:编译运行该程序。按F7键编译并连接Clock工程。然后按Ctrl+F5运行该程序。你会看到一个类似于真实钟表的时钟,它不仅会每秒钟跳动一次,并且在半点和整点时,还具有报时功能。5、测试程序显示效果如下:不足之处:此时钟显示程序功能还不是很多,设计效果也不是很理想,对应的整点处最好标上数字,这样可以方便用户识别,同时可以添加一个闹铃指针,方便用户设置闹铃。6、结论经过对VC+课程设计的编写设计,加深了我对VC+程序设计所学知识的进一步理解,掌握了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全培训教学工作建议课件
- 公司聘用试用员工合同5篇
- 2025年三门峡黄河明珠(集团)有限公司公开招聘高校毕业生考前自测高频考点模拟试题及参考答案详解
- 安全培训效能课件
- 2025福建福州市马尾区琅岐镇殡仪服务站招聘工作人员1人模拟试卷及答案详解(必刷)
- 小学培训独立安全通道课件
- Illudinine-生命科学试剂-MCE
- 安全培训效果评定和改进课件
- 吊车安全责任合同5篇
- HDAC6-IN-62-生命科学试剂-MCE
- 运动学练习题库及参考答案
- DeepSeek从入门到精通
- 沈阳2025年辽宁沈阳辽中区四家事业单位面向区内事业单位遴选18人笔试历年参考题库附带答案详解
- 2025年中国内河码头行业市场深度分析及发展趋势预测报告
- 《国际贸易术语》课件
- 小学生美术素养的综合评价体系构建与实践
- 化学反应中的表示课件九年级化学(2024)上册
- T-CSUS 69-2024 智慧水务技术标准
- 《全国计算机等级考试教程:二级WPS Office高级应用与设计》全套教学课件
- 专题种猪性能测定
- 纺织厂员工劳动合同范本
评论
0/150
提交评论