没有合适的资源?快使用搜索试试~ 我知道了~
首页VC++ 模拟时钟应用程序
VC++ 模拟时钟应用程序
需积分: 9 165 浏览量
更新于2023-03-16
评论 2
收藏 605KB DOC 举报
以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个模拟时钟程序,此程序在屏幕左边有一个指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表。用菜单选项或按钮设置时间和秒表。时间不必与机器系统时间相同,可任意设置。
资源详情
资源评论
资源推荐

案例五 模拟时钟应用程序
以实例为背景学习基于 MFC 的 WINDOWS 应用程序设计,编写
一个模拟时钟程序,此程序在屏幕左边有一个指针式钟面,右方有两
个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的
时间一致,下方的矩形框作为秒表。用菜单选项或按钮设置时间和秒
表。时间不必与机器系统时间相同,可任意设置。
模拟时钟示意图
1 编程要求
(1)为该程序设计一个美观大方的图标。
(2)程序界面设计合理,色彩得体大方,显示正确。
(3)时针、分针和秒针形象美观,即使各指针重合也可辨认。

(4)各指针运动规律正确。为便于演示,时钟速度应比实际时间
快 20 倍,即 1 小时相当于 3 分钟。
(5)数字式时钟的时间显示与指针式时钟显示一致。
(6)按下设置时间按钮或菜单项可弹出一对话框,用于设置当前
的时间和日期。
(7)按下秒表控制按钮后,秒表显示窗中显示从 0 开始的时间,
单位为百分之一秒。再次按下秒表控制按钮后计时停止,该窗口显示
累计时间。
2 问题分析
本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、
定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字等。
指针运动算法和屏幕重绘方法是本程序主要难点所在。
不论何种指针,每次转动均以 π/30 弧度(一秒的角度)为基本单
位,且都以表盘中心为转动圆心。计算指针端点(x, y)的公式如下:
x =圆心 x 坐标 + 指针长度 * cos (指针方向角)
y =圆心 y 坐标 + 指针长度 * sin (指针方向角)

注意,指针长度是指自圆心至指针一个端点的长度(是整个指针
的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端
点。
三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分
针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指
针的运动。若用三个定时器消息分别处理时针、分针和秒针的运动,
就会使问题复杂化且不易实现三个指针联动的正确规律。采用一个定
时器消息可以很容易实现指针联动算法。
由于屏幕的重绘速度很快(50 ms 一次),如果采用全屏删除式重
绘则闪烁十分明显,显示效果不佳。本程序采用非删除式重绘,假定
指针将要移动一格,则先采用背景色(这里是白色)重绘原来指针以
删除原来位置的指针,再采用指针的颜色在当前位置绘制指针;如果
指针没有动,则直接绘制指针。
另外,秒表需要采用单独的定时器消息控制。

3 实现步骤
(1)用 AppWizard 生成一个名为 Clock 的单文档(SDI)程序框
架。为了简化应用程序,在第四步时去掉 Docking toolbar 和 Initial
status bar 选择项,其他各选项均可用缺省设置。
( 2 ) 编 辑 项 目 的 菜 单 资 源 , 在 主 框 架 窗 口 的 主 菜 单
(IDR_MAINFRAME)中添加一个名为“时钟控制”的下拉菜单。在“时
钟控制”菜单中添加三个菜单选项“启动时钟”、“停止时钟”和“时间设置”
并在菜单属性项中设定“启动时钟”菜单的 ID 标号为 ID_START,“停止
时 钟 ” 菜 单 的 ID 标 号 为 ID_STOP , “ 时 间 设 置 ” 菜 单 的 ID 标 号 为
ID_SETTIME。为了简化菜单,可删除系统原有的“文件”、“编辑”菜单
项。
(3)利用 ClassWizard 为视图类添加菜单命令处理函数。进入
ClassWizard 的 Message Maps 选 项 卡 , 选 择 Class Name 项 为
CClockView 类,在 Object IDs 列表框中分别选择新添加的菜单选项的
ID,在 Messages 列表框中选择 COMMAND,按下 Add Function 按钮

添加成员函数。ClassWizard 会为“启动时钟”、“停止时钟”和“时间设置”
菜单选项添加相应的消息响应函数 OnStart ( )、OnStop ( )和 OnSettime (
)。
(4)利用 ClassWizard 为视图类添加定时器和鼠标消息处理函数。
进 入 ClassWizard 的 Message Maps 选 项 卡 , 选 择 Class Name 项 为
CClockView 类 , 在 Messages 列 表 框 中 分 别 选 择 定 时 器 消 息
WM_TIMER 和鼠标消息 WM_LBUTIONDOWN,按下 Add Function 按
钮添加成员函数。ClassWizard 会添加相应的定时器和鼠标消息响应函
数 OnTimer 和 OnLButtonDown。
(5 )使用 Developer Studio 菜单的 Insert / Resource… 选项调出
Insert Source 对话框,为项目添加新的对话框资源。在对话框属性中,
修改对话框名为“时间设定”。在对话框中增加用来输入年、月、日、时、
分、秒的编辑框控件,如下图所示。
剩余28页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0