WEB开发网
开发学院软件开发VC 实现数字钟的另一种方法 阅读

实现数字钟的另一种方法

 2009-01-05 19:39:39 来源:WEB开发网   
核心提示: PaintStatic用来为绘制静态文本控件颜色,CWnd *dlg是控件的指针,实现数字钟的另一种方法(2),在调用时用GetDlgItem(ID)获得指针,COLORREF cr是所选的颜色,for(int j=0;j<6;j++)mc.PaintStatic(GetDlgIte

PaintStatic用来为绘制静态文本控件颜色,CWnd *dlg是控件的指针,在调用时用GetDlgItem(ID)获得指针。COLORREF cr是所选的颜色,CString str是需要显示的文字。

void MyColor::PaintStatic(CWnd *dlg,COLORREF cr,CString str)
{
  CClientDC dc(dlg);
  CRect rect;
  dlg->GetClientRect(&rect);
    CPen pen(PS_SOLID,1,RGB(50,0,10+100));
    dc.SelectObject(&pen);
    CBrush pBrush(cr);
    dc.SelectObject(&pBrush);
    dc.Rectangle(rect);
    dc.SetBkMode(TRANSPARENT);
    dc.TextOut(rect.left+10,rect.top+5,str);
}

COLORREF成员变量c[10],用于存储颜色,我给它赋予10中个人比较喜爱的颜色;

2.在CClockDlg中加入MyColor型的成员变量mc,用于绘制静态控件的颜色

3.对显示数值进行编码,具体函数如下:

void CClockDlg::DrawHour(int n)//显示小时
{
  //首先小时进行分解十位和各位
  int a=n/10;//十位
  int b=n%10;//个位
  DrawNumber(IDC_STATIC1,a);//画十位
  DrawNumber(IDC_STATIC8,a);//画个位
}
void CClockDlg::DrawMinute(int m)//显示分钟
{
  //首先分钟进行分解十位和各位
  int a=m/10;//十位
  int b=m%10;//个位
  DrawNumber(IDC_STATIC15,a);//画十位
  DrawNumber(IDC_STATIC22,a);//画个位
}
void CClockDlg::DrawSecond(int s)//显示秒
{
  //首先秒进行分解十位和各位
  int a=s/10;//十位
  int b=s%10;//个位
  DrawNumber(IDC_STATIC29,a);//画十位
  DrawNumber(IDC_STATIC36,a);//画个位
}
void CClockDlg::DrawDot()//画点
{
  COLORREF C;
  if(n%2==0)
    C=mc.c[2];
  else
    C=mc.c[7];//n为奇数或偶数时,显示不同颜色,以产生闪动
  mc.PaintStatic(GetDlgItem(IDC_STATIC43),C,"");
  mc.PaintStatic(GetDlgItem(IDC_STATIC44),C,"");
  mc.PaintStatic(GetDlgItem(IDC_STATIC45),C,"");
  mc.PaintStatic(GetDlgItem(IDC_STATIC46),C,"");
}
void CClockDlg::DrawNumber(UINT nID,int n)
{
// DrawNumber(UINT nID,int n)函数的输入变量是控件的起始ID和所显示的数字,用途//////显示一个数字
  if(n==0)
  {
    int dx[6]={1,2,3,5,6,7};//数值0所对应的静态控件序号,
    for(int j=0;j<6;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
  if(n==1)
  {
    int dx[2]={2,5};//数值1所对应的静态控件序号,
    for(int j=0;j<2;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
  if(n==2)
  {
    int dx[6]={1,3,4,5,6};//数值2所对应的静态控件序号,
    for(int j=0;j<5;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
  if(n==3)
  {
    int dx[5]={1,3,4,6,7};//数值3所对应的静态控件序号,
    for(int j=0;j<5;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
  if(n==4)
  {
    int dx[4]={2,3,4,7};//数值4所对应的静态控件序号,
  for(int j=0;j<4;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
  if(n==5)
  {
    int dx[6]={1,2,4,6,7};//数值5所对应的静态控件序号,
  
for(int j=0;j<6;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
  if(n==6)
  {
    int dx[6]={1,2,4,5,6,7};//数值6所对应的静态控件序号,
    for(int j=0;j<6;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
  if(n==7)
  {
    int dx[3]={1,3,7};//数值7所对应的静态控件序号,
    for(int j=0;j<3;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
  if(n==8)
  {
    int dx[7]={1,2,3,4,5,6,7};//数值8所对应的静态控件序号,
    for(int j=0;j<7;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
  if(n==9)
  {
    int dx[6]={1,2,3,4,6,7};//数值9所对应的静态控件序号,
    for(int j=0;j<6;j++)
    mc.PaintStatic(GetDlgItem(nID+dx[j]-1),mc.c[4],""); //用循环绘制
  }
}
上述所介绍的方法,实现起来简单,经过简单的拓展可以用于其它方面如界面数字的显示等。

上一页  1 2 

Tags:实现 数字钟 方法

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