( 3)时针、分针和秒针形象美观,即使各指针重合也可辨认
( 4)各指针运动规律正确
为便于演示,时钟速度应比实际时间快 20 倍,即 1 小时相当于 3 分钟
( 5)数字式时钟的时间显示与指针式时钟显示一致
( 6)按下设置时间按钮或菜单项可弹出一对话框,用于设置当前的时间和日期
( 7)按下秒表控制按钮后,秒表显示窗中显示从0 开始的时间,单位为百分之一秒
再次按下秒表控制按钮后计时停止,该窗口显示累计时间
矚慫润厲钐瘗睞枥庑赖
2 问题分析本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字等
指针运动算法和屏幕重绘方法是本程序主要难点所在
聞創沟燴鐺險爱氇谴净
不论何种指针,每次转动均以π /30 弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心
计算指针端点(x, y)的公式如下:残骛楼諍锩瀨濟溆塹籟
x =圆心 x 坐标 + 指针长度* cos (指针方向角 )y =圆心 y 坐标 + 指针长度* sin (指针方向角 )注意, 指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点
酽锕极額閉镇桧猪訣锥
三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格, 因此应该使用一个定时器消息来处理指针的运动
若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律
采用一个定时器消息可以很容易实现指针联动算法
彈贸摄尔霁毙攬砖卤庑
由于屏幕的重绘速度很快(50 ms 一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳
本程序采用非删除式重绘,假定指针将要移动一格,则先采用背景色(这里是白色)重绘原来指针以删除原来位置的指针, 再采用指针的颜色在当前位置绘制