QQ登录

只需一步,快速开始

25上位机VC MFC实现动态的时钟界面

[ 复制链接 ]
25上位机VC MFC实现动态的时钟界面.jpg
25上位机VC MFC实现动态的时钟界面

功能展示
有时候我们需要设计一个时钟,显示电脑系统的当前时间,给我们上位机程序使用都提供方便,那我们当前这一例程就实现了这一功能,效果如上

要点提示
获取电脑当前的系统时间我们或以调用GetCurrentTime函数,而后我们准备一个时钟位置作为时钟的背景。在时钟位图中间的部分我们使用CreateEllipticRgn函数创建一个椭圆形区域,在该区域中绘制表针。

实现功能
1.新建一个单文档的应用程序
2.插入一个时钟背景用位图
3.在视图类的OnDraw(CDC* pDC)函数中绘制时钟背景,并启动一定时器
  1. void CGkbc8View::OnDraw(CDC* pDC)
  2. {
  3.         CGkbc8Doc* pDoc = GetDocument();
  4.         ASSERT_VALID(pDoc);
  5.         // TODO: add draw code for native data here
  6.         time = CTime::GetCurrentTime();
  7.         if(hour>12)
  8.         {
  9.                 hour=hour-12;
  10.         }
  11.         sec = time.GetSecond();
  12.         min = time.GetMinute();
  13.         hour = time.GetHour();
  14.         CDC dc;
  15.         CBitmap bmp;
  16.         bmp.LoadBitmap(IDB_BITMAP1);        //IDB_BITMAP1是待显示位图的资源ID
  17.         BITMAP bm;
  18.         bmp.GetBitmap(&bm);
  19.         int nWidth = bm.bmWidth;
  20.         int nHeight = bm.bmHeight;
  21.         dc.CreateCompatibleDC(pDC);
  22.         dc.SelectObject(&bmp);
  23.         pDC->BitBlt(18, 0, nWidth, nHeight, &dc, 0, 0, SRCCOPY);
  24.         SetTimer(2,1,NULL);
  25. }
复制代码

4.在定时器处理函数中绘制表针
  1. void CGkbc8View::OnTimer(UINT nIDEvent)
  2. {
  3.         // TODO: Add your message handler code here and/or call default
  4.          if(1==nIDEvent|2==nIDEvent)
  5.         {         KillTimer(2);
  6.                 CDC *pDC=this->GetDC();
  7.                 CRect m_rect;
  8.                 this->GetClientRect(m_rect);      
  9.                 CRgn rgn;
  10.                 HRGN m_hrgn;
  11.                 m_hrgn = ::CreateEllipticRgn(64,40,186,165);
  12.                 rgn.Attach(m_hrgn);      
  13.                 CBrush m_brush (1,RGB(255,255,255));
  14.                 pDC->SelectClipRgn(&rgn,0);
  15.                 pDC->FillRgn(&rgn,&m_brush);
  16.                 int x=120;
  17.                 int y=100;
  18.                 CPen pen;                                        //声明画笔
  19.                 pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建实线画笔
  20.                 pDC->SelectObject(&pen);                //将画笔选入设备上下文
  21.                 pDC->MoveTo (x,y);
  22.                 pDC->LineTo (x+(long)55*cos(pi/2-2*pi*sec/60.0),y-(long)55*sin(pi/2-2*pi*sec/60.0));
  23.                 CPen pen1;                                        //声明画笔
  24.                 pen1.CreatePen(PS_SOLID,2,RGB(0,0,0));//创建实线画笔
  25.                 pDC->SelectObject(&pen1);                //将画笔选入设备上下文
  26.                 pDC->MoveTo (x,y);
  27.                 pDC->LineTo (x+(long)45*cos(pi/2-2*pi*min/60.0),y-(long)45*sin(pi/2-2*pi*min/60.0));
  28.                 pDC->MoveTo (x,y);
  29.                 pDC->LineTo (x+(long)35*cos(pi/2-5*2*pi*hour/60.0),y-(long)35*sin(pi/2-5*2*pi*hour/60.0));
  30.                 sec = sec+1;
  31.                 if(sec==60)
  32.                 {
  33.                         sec=0;
  34.                         min=min+1;
  35.                         if(min==60)
  36.                         {
  37.                                 min=0;
  38.                                 hour=hour+1;
  39.                         }
  40.                 }
  41.                 pen.DeleteObject();
  42.                 pen1.DeleteObject();
  43.         }
  44.         CView::OnTimer(nIDEvent);
  45. }
复制代码
定时器1为1000毫秒定时在CVIEW的OnCreate()启动,SetTimer(1,1000,NULL);

下面演示下功能实现的整个过程


源码及视频下载
(仅在电脑可见)
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:25.上位机VC MFC实现动态的时钟界面.rar 
文件大小:172.89 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索