WEB开发网
开发学院软件开发VC 七段数码显示的数字时钟 阅读

七段数码显示的数字时钟

 2010-07-20 20:46:21 来源:WEB开发网   
核心提示:要画出逼真的效果来,必须精确或基本精确去计算出多边形的每个顶点的坐标,七段数码显示的数字时钟(2),然后用作图函数MoveTo和LineTo去画线条,画线前,就可以画单个数字了,进而可以在不同的位置画出时、分、秒,可以构造一个画笔,用指定的颜色去画

要画出逼真的效果来,必须精确或基本精确去计算出多边形的每个顶点的坐标,然后用作图函数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();
  }
}

Tags:数码 显示 数字

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接