案例五 模拟时钟应用程序 以实例为背景学习基于MFC 的W INDOW S 应用程序设计,编写一个模拟时钟程序,此程序在屏幕左边有一个指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表
用菜单选项或按钮设置时间和秒表
时间不必与机器系统时间相同,可任意设置
模拟时钟示意图 1 编程要求 (1)为该程序设计一个美观大方的图标
(2)程序界面设计合理,色彩得体大方,显示正确
(3)时针、分针和秒针形象美观,即使各指针重合也可辨认
(4)各指针运动规律正确
为便于演示,时钟速度应比实际时间快 20 倍,即 1 小时相当于3 分钟
(5)数字式时钟的时间显示与指针式时钟显示一致
(6)按下设置时间按钮或菜单项可弹出一对话框,用于设置当前的时间和日期
(7)按下秒表控制按钮后,秒表显示窗中显示从0 开始的时间,单位为百分之一秒
再次按下秒表控制按钮后计时停止,该窗口显示累计时间
2 问题分析 本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字等
指针运动算法和屏幕重绘方法是本程序主要难点所在
不论何种指针,每次转动均以π/30 弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心
计算指针端点(x, y)的公式如下: x =圆心 x 坐标 + 指针长度 * cos (指针方向角) y =圆心 y 坐标 + 指针长度 * sin (指针方向角) 注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点
三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动
若用三个定时器消息分别处理时针、分针和秒针的运动,就