数字时钟程序总结

来源:互联网 发布:linux环境变量设置 编辑:程序博客网 时间:2024/04/28 19:38

昨天看到一个制作数字时钟的程序,觉得很有意思,便拿来研究了一下,为了防止忘记,先总结一下,以备不时只需。

一  整个程序的框架

数字时钟程序是使用了基于对话框的框架来编程的。包括了四个类:CAoutDlg,CDigitalClock,CMyClockApp,CMyClockDlg类,其中,CDigitalClock类中包含了对数字时钟显示所需要的变量和函数,且他是由CStatic类派生而来。

1)先在对话框中放置了一个静态文档,并与CDigitalClock类的对象进行关联,以确保能够完成数据间的传递。

2)在CMyClockDlg类中添加时间消息ONTimer( ),并在对话框初始化函数中使用SetTimer( )函数来触发事件消息。

3)在时间消息响应函数ONTimer()中使用CTime::GetCurrentTime()获取当前的时间并传递给CDigitalClock类的变量,以保存现时刻的时间

4)得到了当前的时间之后,最重要的是要显示出这个时间。程序采用了七段式的数字显示方式,数字在显示过程中,先定位了离静态文档起始点的距离,数字与数字之间的间隔,以及数字的宽度,而数字的高度则是两个宽度,数字的宽度大小是控件高度的一半。要显示出的时间的格式是小时:分钟:秒,且是24小时格式显示,这就需要有两个数字来显示小时,两个数字来显示分钟以及两个数字来显示秒,就占了6个数字的宽度,为了保此美观,中间的"点"也占一个数字的宽度,这样,整个显示数字区的应该是8×数字的宽度+3×数字之间的间隔。

使用m_width表示数字的宽度,m_xmargin表示起点的x坐标,m_ymargin表示起点的y坐标,m_space表示数字与数字间的间隔。

m_width=(rect.Height()-ymargin*2)/2;m_xmargin=(rect.Width()-8*m_width-3*m_space)/2;知道了数字的起始点的位置之后,就可以按格式来显示时间了。每显示完一个数字之后

m_ymargin+=m_width;或m_ymargin+=m_space。

5)在显示每个数字时是使用七段式的方式来显示的,即根据当前的时间确定需要显示的段数,为了美观,每个段都设计成一个多边形,确定各个点的位置,连成多边形并填充上颜色。

整个程序框架就是这样,核心就在各个数字的显示上。

二  思想

一种由大化小的思想,要显示整个时间就要分别显示出小时/分钟/秒,而小时,分钟,秒的显示又可小化为每个数字的显示,每个数字的显示具体就是数字各个段的显示,而数字各个段的显示则需要确定各段的点的位置。由此反回去,则就能得到整个显示的时间。

三  使用到的类和函数

时间消息处理函数OnTimer()

CRgn类,封装了区域的操作

用到了CRgn类中的CreatePolygonRgn()创建多边形的函数,和CreateEllipticRgn()创建省略区域

使用了CDC::FillRgn()函数用来填充区域

使用CDC::Ellipse()函数来创建圆

使用CRect::SetRect()函数来创建矩形

使用了CRect::OffsetRect()函数来对矩形区域进行偏移

为了保证在显示时间时不出现闪烁现象,使用了双缓存。具体的方法是先在内存中创建一个与设备兼容的内存设备上下文,也就是开辟一块内存区来作为显示区域,然后在这个内存区进行绘制图形。在绘制完成后利用 BitBlt函数把内存的图形直接拷贝到屏幕上。



0 0