要求:
模拟交通灯:
(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关闭定时器,整个视图暂停,重新开启时,又会恢复最初的状态运行。
其功能就与日常所见的交通灯相同,附加了停止和开始的按钮,点击“开始”时,红灯先亮,伴随着时间的倒数,倒数到一定时间后,转为黄灯亮,再转为绿灯亮,依次循环;点击“停止”时,暂停在当前状态,当再次点击 “开始”时,又会重新运行。
【修改图标的方法可参考之前发的博客】
运行结果如下: