案例五 模拟时钟应用程序.pdf

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
案例五 模拟时钟应用程序 以实例为背景学习基于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 为视图类添加定时

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档