模拟时钟
以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个模拟时钟程序,此程序在屏幕上有一个指针式钟面,用菜单选项进行时间控制。时间必与机器系统时间相同,不可任意设置。1编程要求
(1)为该程序设计绘制合适的时钟外形。(2)程序界面设计合理,色彩得体大方,显示正确。(3)时针、分针和秒针形象美观,即使各指针重合也可辨认。(4)各指针运动规律正确,以便于演示。(5)时间显示正确,并且显示当前系统时间。(6)按下设置菜单项可实现时间的调整与重新显示2问题分析本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、菜单命令、画笔画刷等。指针运动算法和屏幕重绘方法是本程序主要难点所在。不论何种指针,每次转动均以π30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。计算指针端点(xy)的公式如下:x圆心x坐标指针长度cos指针方向角y圆心y坐标指针长度si
指针方向角注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律。采用一个定时器消息可以很容易实现指针联动算法。3实现步骤(1)用AppWizard生成一个名为“模拟时钟”的单文档(SDI)程序框架。为了简化应用程序,在第四步时去掉Docki
gtoolbar和I
itialstatusbar选择项,其他各选项均可用缺省设置。
f(2)编辑项目的菜单资源,在主框架窗口的主菜单(IDR_MAINFRAME)中添加一个名为“时钟控制”的下拉菜单。在“时钟控制”菜单中添加二个菜单选项“启动时钟”、“停止时钟”并在菜单属性项中设定“启动时钟”菜单的ID标号为ID_START,“停止时钟”菜单的ID标号为ID_STOP,“为了简化菜单,可删除系统原有的“编辑”、“关于”等菜单项。(3)利用ClassWizard为视图类添加菜单命令处理函数。进入ClassWizard的MessageMaps选项卡,选择ClassName项为CMyView类,在ObjectIDs列表框中分别选择新添加的菜单选项的ID,在Messages列表框中选择COMMAND,按下AddFu
ctio
按钮添加成员函数。ClassWizard会为“启动时钟”、“停止时钟”菜单选项添加相应的消息响应函数O
Start、O
Stop。(4)设计好这个对话框r