#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;
}