七段数码显示的数字时钟
2010-07-20 20:46:21 来源:WEB开发网要画出逼真的效果来,必须精确或基本精确去计算出多边形的每个顶点的坐标,然后用作图函数MoveTo和LineTo去画线条,画线前,可以构造一个画笔,用指定的颜色去画。把几个边的线条画好后,发现还需要进行填充,因此再去构造一个区域,使用画刷进行填充。这样一来,不仅画出了立体效果,还可以设置不同的背景色和前景色。以下代码展示了第一段的绘制过程
void CDigitalClock::DrawSection1(int nLeft)
{
if (m_memDC.m_hDC!=NULL)
{
CPoint point[4];
point[0].x=nLeft+(int)(0.1*m_nWidth);
point[0].y=m_nYmargin;
point[1].x=nLeft+(int)(0.9*m_nWidth);
point[1].y=m_nYmargin;
point[2].x=nLeft+(int)(0.7*m_nWidth);
point[2].y=(int)(0.2*m_nWidth)+m_nYmargin;
point[3].x=nLeft+(int)(0.3*m_nWidth);
point[3].y=(int)(0.2*m_nWidth)+m_nYmargin;
CBrush br(m_crText);
CRgn rgn;
rgn.CreatePolygonRgn(point,4,ALTERNATE);
m_memDC.FillRgn(&rgn,&br);
br.DeleteObject();
rgn.DeleteObject();
m_memDC.MoveTo(point[0]);
m_memDC.LineTo(point[1]);
m_memDC.MoveTo(point[1]);
m_memDC.LineTo(point[2]);
m_memDC.MoveTo(point[2]);
m_memDC.LineTo(point[3]);
m_memDC.MoveTo(point[3]);
m_memDC.LineTo(point[0]);
}
}
实现了这些基本元素“段”,就可以画单个数字了,进而可以在不同的位置画出时、分、秒。冒号由一个专门的函数Draw2Dot来实现。
void CDigitalClock::Draw2Dot(int nLeft)
{
if (m_memDC.m_hDC!=NULL)
{
CBrush br(m_crText);
CRect rect;
rect.SetRect(nLeft+(int)(0.3*m_nWidth),(int)(0.4*m_nWidth)+m_nYmargin,
nLeft+(int)(0.6*m_nWidth),(int)(0.7*m_nWidth)+m_nYmargin);
m_memDC.Ellipse(rect);
CRgn rgn1;
rgn1.CreateEllipticRgn(rect.left,rect.top,rect.right,rect.bottom);
m_memDC.FillRgn(&rgn1,&br);
rect.OffsetRect(0,(int)(0.8*m_nWidth)+m_nYmargin);
m_memDC.Ellipse(rect);
CRgn rgn2;
rgn2.CreateEllipticRgn(rect.left,rect.top,rect.right,rect.bottom);
m_memDC.FillRgn(&rgn2,&br);
br.DeleteObject();
rgn1.DeleteObject();
rgn2.DeleteObject();
}
}
更多精彩
赞助商链接