VC++6.0实现MFC单文档模拟交通灯

创建了一个以学生姓名拼音首字母命名的单文档应用,修改图标和版本信息,添加开始和停止按钮。程序在视图窗口用不同颜色的圆模拟红绿灯,并通过倒计时交替改变灯的状态。使用OnTimer函数处理灯的切换逻辑,OnDraw函数负责图形绘制。开始和停止按钮控制交通灯的运行和暂停。
摘要由CSDN通过智能技术生成

要求:

模拟交通灯:

(1)建立一个单文档应用项目(项目名称为学生姓名拼音首字母缩写)。

(2)修改它的图标和版本信息。

(3)为该应用项目添加两个按钮到工具栏中。

(4)在视图窗口中显示三个圆,通过使用不同颜色的画笔及画刷来模拟交

通红、绿灯。

设计思路及结果功能描述:

       根据考核题目及要求,设计的思路如下:先建立一个单文档应用项目,修改其版本信息和图标,为该应用项目添加两个按钮到工具栏中,分别命名为“开始”和“停止”,在视图窗口中显示三个圆,使用不同颜色的画笔及画刷给三个圆上色,同时添加一个倒计时显示,最后将这几个元素关联起来。倒计时到一定的时间时,红黄绿等分别交替亮起,模拟交通灯。

设计方案如下,建立单文档后,修改版本和图标,添加“开始”和“停止”按钮,完成上述的操作后在hy_traffic_lightView.h文件下,定义了time_queue结构体,包含红绿灯的标识nLight_statu以及灯亮的时间值nTimeOut,定义了当前时间current_time_index和计数时间 _time_count。定义一个名为time_queue的动态数组,在OnInitialUpdate函数中向该数组尾部添加元素,即灯的状态与持续的时间值,通过push_back从尾部添加新元素,实现对结构进行初始化操作,以及交通灯逻辑功能的设置。

       在OnTimer函数中,根据得到的TimeOut值进行数值的变化并且根据当前值使用switchLight显示当前灯的状态,即给绘制的图形上色。

       在OnDraw函数中,实现使用memDC进行绘图显示,获取屏幕的大小后,通过算法得到三个矩形的位置坐标与宽度等参数,再在drawLight上使用Ellipse画内切圆,设置视图的背景颜色以及初始化逻辑刷子,以及添加根据LightStatus标识决定三个圆颜色的语句,同时使用Format设置倒计时显示的输出位置与格式设置,最后使用BitBlt将图拷贝到屏幕上显示。

       使用OnControlStart开启定时器,整个视图开始工作,OnControlStop关闭定时器,整个视图暂停,重新开启时,又会恢复最初的状态运行。

其功能就与日常所见的交通灯相同,附加了停止和开始的按钮,点击“开始”时,红灯先亮,伴随着时间的倒数,倒数到一定时间后,转为黄灯亮,再转为绿灯亮,依次循环;点击“停止”时,暂停在当前状态,当再次点击 “开始”时,又会重新运行。

        【修改图标的方法可参考之前发的博客】

运行结果如下:

 

 

完整代码参考:https://download.csdn.net/download/baiyan_gjr521/10404669?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168802106116800180664728%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168802106116800180664728&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-10404669-null-null.142^v88^insert_down38v5,239^v2^insert_chatgpt&utm_term=MFC%E6%A8%A1%E6%8B%9F%E4%BA%A4%E9%80%9A%E7%81%AF&spm=1018.2226.3001.4187.3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小奇兵1213号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值