基于C++MFC实现模拟时钟程序[2024-01-07]

基于C++MFC实现模拟时钟程序[2024-01-07]

设计二 模拟时钟程序

一、概述
计时器是程序中最常用的后台任务机制之一,其时间间隔最低约 55 毫秒,被广泛用于时钟、磁盘备份程序或需要在某一时刻运行的程序等。而模拟时钟是一种集计时器和时
钟显示于一体的程序。
以实例为背景学习基于 MFC 的 WINDOWS 应用程序设计,编写一个指针式时钟程序,此程序在屏幕正中有一个指针式钟面,屏幕下方或右方以数字方式显示日期和时间。指针式的时钟表盘为椭圆形或圆形,并且圆周上有分布均匀的 12 个刻度,刻度要求显示清晰,钟面上有长度和颜色及粗细各不相同的指针,即时针、分针、秒针,以便各个指针重合时亦可以轻易辨认,指针的运动要求具有规律性,且为顺时针。数字钟的钟面为一个规则的矩形,其显示时间的格式是时:分:秒,小时为 24 进制,分钟和秒是 60 进制,指针式的时钟和数字式的时钟显示的时间同步,且两个时钟所显示的时间与计算机的系统时间一致。
通过对指针式时钟的设计,可以掌握 API 或 MFC 编程,其中包括各种视图类的作用、绘图函数的使用、计时器的操作、对话框的使用及应用程序的调试,同时对面向对象与可视化程序设计有一定的认识,并提高动手编程的能力。

二、设计任务
1、提出总体方案的设计思想和原理,绘制程序流程图和描述程序的功能,并说明程序的特点和难点。
2、编程要求
(1)为该程序设计一个美观大方的图标。
(2)程序界面设计合理,色彩得体大方,显示正确。
(3)用绘图函数绘制钟的界面图。时针、分针和秒针形象美观,即使各指针重合也可辨认。
(4)各指针运动规律正确。
(5)客户区中显示数字时钟,数字式时钟的时间显示与指针式时钟显示一致。
(6)提供对话框由用户设置和修改当前新的时间。
3、调试程序,达到所要求的功能。

三、设计步骤
1、钟面功能设计
根据自己的考虑绘制钟的界面图,具体也可参照下图:

或另一种方案图:

或另一种方案图:

2、 具体设计
本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、菜单命令、对话框、画笔/画刷、显示文字等。指针运动算法和屏幕重绘方法是本程序主要难点所在。
不论何种指针,每次转动均以π/30 弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。计算指针端点(x, y)的公式如下:
x =圆心 x 坐标 + 指针长度 * cos (指针方向角)
y =圆心 y 坐标 + 指针长度 * sin (指针方向角)
注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。
三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。
(1) OnDraw()函数实现对系统时间的获取和绘制椭圆表面和时钟指针。
(2) 设置计时器,创建窗口时调用 SetTimer()函数启动一个计时器不断发出 WM_TIMER消息。
(3) 用 TextOut()函数显示数字钟。
(4) 添加菜单,用菜单项控制弹出对话框设置显示的时间。

3、 重点和难点
(1) 使用计时器需要了解两个函数:SetTimer()函数用来设置一个计时器以指定的时间间隔触发,KillTimer()函数用来使一个正在运行的计时器停止。
(2) 时钟指针的显示和移动是一个需要注意的方面。
(3) 注意屏幕重绘方法。
(4) 掌握如何显示文本,将用户设置的时间更新时钟的显示。

四、思考题

  1. 程序中如何实现时钟时间与计算机系统时间保持一致?
  2. SetTimer()函数和 KillTimer()函数的调用位置与程序运行的关系?
  3. 说明 SetTimer()函数、WM_TIMER 消息和 OnTimer()函数的调用关系?
  4. 实现数字钟时,涉及到的编程有哪些?

程序实现

源码联系UP主 -> https://space.bilibili.com/329101171

程序录屏

程序主界面

时间设置界面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值