模拟时钟,让时钟走动

#include <windows.h>
#include <stdio.h>
#include <math.h>
#define PI 3.1415926

long CALLBACK WndProc(HWND hWnd, int message, int wParam, int lParam);

int _stdcall WinMain(HINSTANCE hInstance,
    HINSTANCE hPrelnstance,
    LPSTR lpCmdLine,
    int nShowCmd)
{

 //1、设置窗体属性
 WNDCLASSEX wcex;
   
 // 结构体的大小
 wcex.cbSize = sizeof(WNDCLASSEX);
 // 窗体类的样式
 wcex.style = CS_HREDRAW | CS_VREDRAW;
 // *窗体回调函数
 wcex.lpfnWndProc = (WNDPROC)WndProc;
   // 窗体类额外字节数,通常为0
 wcex.cbClsExtra  = 0;
 // 窗体实例额外字节数,通常为0
 wcex.cbWndExtra  = 0; 
 // *应用程序实例句柄
 wcex.hInstance  = hInstance;     
 wcex.hIcon   = NULL;       // 窗体大图标
 wcex.hCursor  = LoadCursor(NULL, IDC_ARROW); // 窗体鼠标光标样式
 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+7); // 窗体背景色
 wcex.lpszMenuName = NULL;       // 窗体主菜单
 // *窗体类名称
 wcex.lpszClassName = "Bekty";     
 wcex.hIconSm  = NULL;       // 窗体小图标
 
 //2、注册窗体
 RegisterClassEx(&wcex);

 //3、创建窗体
 HWND hWnd = CreateWindow(
  "Bekty",    // *窗体类名称
  "Window 我来了",    // 窗体标题名
  WS_OVERLAPPEDWINDOW, // 窗体外观样式
  CW_USEDEFAULT,   // 窗体在屏幕上的水平位置
  0,      // 窗体在屏幕上的垂直位置
  CW_USEDEFAULT,   // 窗口的宽度
  0,      // 窗口的高度
  NULL,     // 父窗体句柄
  NULL,     // 窗口菜单句柄
  hInstance,    // *创建窗体的应用程序实例句柄
  NULL);     // 创建窗体时的额外信息,通常为NULL
 
 if (NULL == hWnd)
 {
  return FALSE;
 }

 //4、显示窗体
 ShowWindow(hWnd, nShowCmd);

 //5、 更新窗体
 UpdateWindow(hWnd);

 //6、主消息循环
 MSG msg;
 while (GetMessage(&msg, NULL, 0, 0)) // 从消息队列中获取消息
 {
  TranslateMessage(&msg);  // 转换消息
  DispatchMessage(&msg);  // 分发消息给回调函数
 }

 return msg.wParam;
 
}

long CALLBACK WndProc(HWND hWnd, int message, int wParam, int lParam)
{
 switch (message)
 {
  case WM_CREATE:
  {
   //设置定时器
   SetTimer(hWnd,1,600,NULL);
   break;
  }
  case WM_TIMER:
  {
   HDC hDc=GetDC(hWnd);

   static int x=450,y=250,r=130;
   static int rh=60,rm=80,rs=110;
   static int x_h,y_h,x_m,y_m;
   static int x_s,y_s,x1,y1;
   static int is=0,ih=11*5,im=16;
   static int h=11,m=16,s=0,j=0;
  
   //画笔的粗细、颜色
   HPEN hPen=::CreatePen(PS_DOT,2,RGB(160,32,240));
   //画刷的颜色
   HBRUSH hBrush=::CreateSolidBrush(RGB(0,255,127));
   ::SelectObject(hDc,hPen);
   ::SelectObject(hDc,hBrush);

   Ellipse(hDc,300,100,600,400);

  // hBrush=::CreateSolidBrush(RGB(0,255,255));
  // ::SelectObject(hDc,hBrush);
  // Ellipse(hDc,320,120,580,380);

   for(int i=0;i<=60;i+=5)
   {
     x1=x+(int)(r*cos(i*PI/30-PI/2));
        y1=y+(int)(r*sin(i*PI/30-PI/2));

    char s[3];
    sprintf(s,"%d",i/5);
       TextOut(hDc,x1-3,y1-9,s,strlen(s)); 
   } 
   x_s=x+(int)(rs*cos(is*PI/30-PI/2));
   y_s=y+(int)(rs*sin(is*PI/30-PI/2));
   is++;

         x_m=x+(int)(rm*cos(im*PI/30-PI/2));
   y_m=y+(int)(rm*sin(im*PI/30-PI/2));

   x_h=x+(int)(rh*cos(ih*PI/30-PI/2));
   y_h=y+(int)(rh*sin(ih*PI/30-PI/2));

   ::MoveToEx(hDc,x,y,NULL);
   ::LineTo(hDc,x_s,y_s);

   ::MoveToEx(hDc,x,y,NULL);
   ::LineTo(hDc,x_m,y_m);
   
   ::MoveToEx(hDc,x,y,NULL);
   ::LineTo(hDc,x_h,y_h);
   
   if(is%60==0)
   {
    im++;
          if(im%12==0)
     ih++;
   }
   if(ih==60)   ih=0;
   
   char a[10];
   sprintf(a,"%02d:%02d:%02d",h,m,s);
   s++;
   if(s==60) s=0,m++;
   if(m==60)   h++,m=0;
   
   TextOut(hDc,430,260,a,strlen(a));

   ReleaseDC(hWnd,hDc);
   break;
   
  }
  case WM_PAINT:
  {
   PAINTSTRUCT ps;
   HDC hDc=::BeginPaint(hWnd,&ps);

   ::EndPaint(hWnd,&ps);
   
   break;
  }
  case WM_DESTROY:
  {
   PostQuitMessage(0);
   //销毁定时器
   KillTimer(hWnd,1);
   break;
  }
  default:
   return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值