用C编写模拟时钟程序

上传人:gg****m 文档编号:214848723 上传时间:2021-11-24 格式:DOCX 页数:9 大小:165.19KB
返回 下载 相关 举报
用C编写模拟时钟程序_第1页
第1页 / 共9页
用C编写模拟时钟程序_第2页
第2页 / 共9页
用C编写模拟时钟程序_第3页
第3页 / 共9页
用C编写模拟时钟程序_第4页
第4页 / 共9页
用C编写模拟时钟程序_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《用C编写模拟时钟程序》由会员分享,可在线阅读,更多相关《用C编写模拟时钟程序(9页珍藏版)》请在金锄头文库上搜索。

1、模拟时钟程序1基本功能描述本次课程设计是基于面向对象的应用程序设计,主要运用C+语言在VC+开发环境 下的MFC中编程实现。模拟时钟的基本功能是程序初始在屏幕上有一指针式时钟表盘, 表盘为椭圆形,内部分布有12个刻度,表盘上有三个长度和颜色不同的时针分针和秒针, 相互之间容易辨认,指针的运动通过数学推导之后以代码实现。表盘的下方是一个数字形 式显示的数字钟,其显示时间的格式是时:分:秒,扌詡式时钟和数字式时钟显示的时间 同步,且两个时钟所显示的时间与系统时间相致,页面的菜单项设有时间设置项,可以对 所显示的时间进行调整,能进行调整的具体内容是年、丿、FI、时、分、秒。设计成功之 后,此应用程序

2、便可以起到时钟显示的作用。2设计思路2.1程序流程图图1模拟时钟程序流程图2. 2程序流程分析(1) 绘制指针式的时钟和数字式的时钟图形时,要在CView类下进行。其中OnDraw() 函数在绘制视图窗口时被调用,在定义了画刷CBrush和画笔CPen之后,调用 GetClientRectO定义屏幕大小并确定椭圆中心的坐标,然后调用Ellipse绘制椭圆,即指针 式的时钟表盘,SetTextColor绘制文本颜色,调用MoveTo和LineTo绘制表盘指针,同时 调用CreateFont()iJ建数字钟字体,TextOut则是用以数字钟的文本输出。(2) 模拟时钟处理消息的过程:首先调用Set

3、Timer函数定义时钟消息,包括参数指定 计时器的ID,消息产生的时间间隔,冋调函数为NULL;调用消息处理函数OnTimer()刷新 窗口显示。在相应的WM.TIMER消息处理里添加时钟消息响应代码;最后调用KillTimer 释放该时钟。(3) 要实现时钟的动态效果,即时间窗显示的时间毎隔一秒钟更新一次,需要在时间 窗格的正文调用CStatusBar:SetPaneText()i|数。要定时更新,则应利用WM_TIMER消息, 计时器每隔一定的时间间隔就会发出一个WM.TIMER消息,而这个时间间隔可由用户指 定。MFC的Windows类提供了 WM_TIMER消息处理函数OnTimer(

4、),应在该函数内进行 更新时间窗格的工作。先利用ClassWazard给CMainFrame类加入WM TIMER消息处理函数 OnTimer(), CMainFrame: OnTimer()函数是在系统发给框架窗口消息WM.TIMER时调用 的,在CMainFrame:OnCreate()函数内调用CWnd:SetTimer()以安装一个计时器,使 OnTimer()在设定的时间间隔被调用。(4) 通过调用GetCurrentTime()函数来实现时钟时间与计算机系统时间保持一致,在 时间与计算机同步后,然后在File View选项卡中的Source File资源组里面的littlelDoc

5、.cpp 中的void ClittlelDoc:OnEditSet()添加相应的变量以实现对时间的调整。(5) 在程序设计过程之中添加“时钟控制”菜单,用菜单项控制弹出对话框设置时间, 使时钟达到可调的效果。(6) 程序运行正常,界面设置合理,指针式的时钟和数字式的时钟的运动达到任务书 的要求,并且能用菜单项控制对话框以实现对当前时间的调整,程序达到各项功能之后, 退岀界面,程序结束。3软件设计3. 1设计步骤(1) 用AppWizard创建一个单文档的的MFC工程,将之命名为little 10所有步骤均使 用AppWizard给出的默认设置。(2) 编辑项目的菜单资源,在主框架窗口的主菜单(

6、IDR_MAINFRAME)中添加一个 名为“时钟控制”的下拉菜单。在“时钟控制”菜单中添加三个菜单选项“启动时钟”、“停 止时钟”和“时间设置”。并在菜单属性项中设定“启动时钊菜单的ID标号为ID_START,“停止时钟”菜单的ID标号为ID_STOP, “时间设置”菜单的ID标号为ID_SETTIMEo图2 “吋钊|控制”菜单效果(3)利用ClassWizard为视图类添加菜单命令处理函数。进入ClassWizard的MessageMaps选项卡,选择Class Name项为ClittlelView类,在Object IDs列表框中分别选择新添 加的菜单选项的ID,在Messages列表框

7、中选择COMMAND,按下Add Function按钮添加 成员函数。ClassWizard会为“启动时钟”、“停止时钟”和“时间设置”菜单选项添加相应 的消息响应函数 OnStart ()、OnStop ()和 OnSettime ()。(4) 利用ClassWizard为视图类添加定时器和鼠标消息处理函数。进入ClassWizard 的Message Maps选项卡,选择Class Name项为ClittlelView类,在Messages列表框中分 别选择定时器消息WM.TIMER和鼠标消息WM_LBUTIONDOWN,按卜Add Function按 钮添加成员函数。ClassWizar

8、d会添加相应的定时器和鼠标消息响应函数OnTimer和 OnLButtonDown。(5) 使用 Developer Studio 菜单的 Insert / Resource.选项调出 Insert Source 对话框, 为项目添加新的对话框资源。在对话框属性中,修改对话框名为“时间设定”。在对话框 中增加用來输入年、月、F1、时、分、秒的编辑框控件,如下图所示。图3吋间设置对话框(6) 设计好这个对话框模板后,利用ClassWizard自动建立对话框类。进入ClassWizard 后,它会发现已建立的对话框模板资源,并弹出一个对话框询问是否要为该对话框模板建 立类。按下“0K”按钮,会弹出

9、New Class对话框,在Name栏填写对话框类的名称 CSetTimeDlg后按“0K”按钮,即可为对话框创建一个对应的类。(7) 利用ClassWizard为对话框类添加与各控件对应的数据成员。选择MemberVariables 选项卡,确保Class Name项为对话框CSetTimeDlg类,然后在选项卡下方的窗口中选择各 控件的ID并按下“AddVariable.”按钮,为其添加对应成员变量,如表1所示。表1编辑控件属性Control IDsVariable TypeMember variablenameVariableRangeIDC_YEARIntm_Y ear03000IDC

10、_MONTHIntm_Month112IDC.DAYImtm_Day131IDC.HOURImtm_Hour023IDC_MINUTEIntm_Minute059IDC.SECONDIntm_Second059最后一列为变量取值范围。(8) 完成以上工作后,即町修改程序框架,添加必要的代码。在ClittlelView类中加 入消息处理两数 OnTimer() , OnEraseBkgnd()和 OnCreate()并添加代码,在 ClittlelView:OnDraw(CDC* pDC)中添加绘制时钟钟面、刻度、指针以及输出数字时钟的代 码。(9) 在头文件中添加对各种函数及变量的声明,同时在

11、类的原文件中添加实现功能所 需要的各种两数,并添加相应的代码。(10) 对完成后的程序不断进行调试,分析并修改其中的错误,宜到程序运行不再报 错,并能够实现所要求的各项功能。3. 2界面设计模拟时钟的界面设计比较简单,如图3所示,只需6个编辑框和相应的6个静态文木 框,由于显示的时间都是整数,所以控件的类型都选为int型,因而所需要设计的控件也 比较简单,界面设计的控件表如表2所示。表2界面控件表控件序号控件名称控件类型控件ID和应变量1年编辑框(int)IDC EDIT1m editl2月编辑框(int)IDC EDIT2m edit23口编辑框(血)IDC ED1T3m edit34吋编辑

12、框(int)IDC EDIT4m edit45分编辑框(in()IDC EDIT5m edit56秒编辑框(int)IDC EDIT6m edit63.3关键功能的实现3. 3. 1模拟时钟显示模拟时钟的显示主要在于绘图这一方面,也是本次模拟时钟课程设计的重中之重。这 一部分所要添加的代码在File View选项卡中的Source File资源组里little 1 View.cpp中: 首先要调用SetTimer()函数设置吋间间隔,语句是SetTimer( 1,1000,NULL), SetTimer()的第一个参数 指定计时器ID为1,第二个参数规定了计时器的时间间隔为1000ms,即Is

13、,这样,每隔Is就调用一 次 OnTimer()函数。(2) 定义也笔CPen和画刷CBrush,并通过调用GetClientRect()定义屏幕大小并确定椭 圆中心坐标的位置,横坐标定义为int nCenterX = Rect.right / 2,纵坐标定义为int nCenterY =10+(Rect.bottom-110 )/ 2,接着调用 Ellipse()绘制椭圆的钟面 pDC-Ellipse( nCenterX - 300, 10, nCenterX + 300,Rect.bottom 100 )。(3) 接着lUli出表盘12个刻度,先算出每一个刻度对应的角度Radians =

14、(double) i * 6.28 / 12.0,然后算出每一个刻度的横坐标是x = nCenterX -( size.cx / 2 ) +(int) ( 285*sin( Radians ),纵坐标是 y = nCenterY -( size.cy / 2 ) -(int) (double) ( nCenterY - 30 ) *cos( Radians)。(4) 调用MoveTo()和LineTo()绘制吋钟钟面的指针和刻度,并定义其类型、粗细和颜 色,例如时针,CPen HourPen( PS_SOLID, 5, RGB( 0, 255, 0 )定义了时针的类型、粗细和 颜色,pDC-M

15、oveTo( nCenterX, nCenterY )定义 了吋针的起点,pDC-LineTo(nCenterX + (int) (double) 295/2 *sin( Radians ), nCenterY - (int) (double) ( nCenterY -10)/2 *cos( Radians ) 定义了时针的终点,刻度、分针和秒针也是如此。(5) 对于数字钟,先编写数字钟输出时间的格式,具体语句是strDigits.Format( n%d:%02d:%02dn,Time.GetHour(),Time.GetMinute(),Time.GetSecond(),然 后定义数字钟的宽度和高度,定义宽度为int nWidth = 25,定义高度为int nHeight = 40,接 着调用CreateFont()J建数字钟字体。(6) 调用 TextOut()对数字钟进行输出,pDC-TextOut( nCenterX - ( size.cx / 2 ), nCenterY (size.cy /2 -200),strDigits )。3. 3. 2显乔时间程序先调用消息处理函数OnTimer()刷新窗口显示,即在voi

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号