#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)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = NULL
wcex.hCursor = LoadCursor(NULL, IDC_ARROW)
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+20);
wcex.lpszMenuName = NULL
wcex.lpszClassName = "FW";
wcex.hIconSm = NULL
RegisterClassEx(&wcex);
HWND hWnd = CreateWindow(
"FW"
"Window ?òà′á?",
WS_OVERLAPPEDWINDOW
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if (NULL == hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);
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,1000,NULL);
break;
}
case WM_TIMER:
{
SYSTEMTIME time;
::GetLocalTime(&time);
HDC hdc=GetDC(hWnd);
static int h=time.wHour*5,m=time.wMinute,sc=time.wSecond;
static int X=250,Y=250,R=150;
static int Hour_R=40,Second_R=140,Minute_R=100;
static int TimeNum_X,TimeNum_Y;
static int SystemTime_S_XR,SystemTime_H_XR,SystemTime_M_XR,SystemTime_S_YR,SystemTime_H_YR,SystemTime_M_YR;
SetTextColor(hdc,RGB(0,0,250));
TextOut(hdc,160,50,"北京时间:",strlen("北京时间:"));
char s[5];
sprintf(s,"%02d",time.wHour);
SetTextColor(hdc,RGB(0,0,250));
TextOut(hdc,230,50,s,strlen(s));
TextOut(hdc,250,50," :",strlen(" :"));
sprintf(s,"%02d",time.wMinute);
SetTextColor(hdc,RGB(0,0,250));
TextOut(hdc,270,50,s,strlen(s));
TextOut(hdc,290,50,":",strlen(":"));
sprintf(s,"%02d",time.wSecond);
SetTextColor(hdc,RGB(0,0,250));
TextOut(hdc,310,50,s,strlen(s));
HPEN hPen=::CreatePen(PS_DOT,4,RGB(50,120,120));
HBRUSH hBrush=::CreateSolidBrush(RGB(255,200,25));
::SelectObject(hdc,hPen);
::SelectObject(hdc,hBrush);
Ellipse(hdc,100,100,400,400);
for(int i=0;i<60;i+=5)
{
TimeNum_X=X+(int)((R-10)*cos(i*PI/30-PI/2));
TimeNum_Y=Y+(int)((R-10)*sin(i*PI/30-PI/2));
sprintf(s,"%d",i/5);
TextOut(hdc,TimeNum_X-3,TimeNum_Y-10,s,strlen(s));
if(i ==0 )
TextOut(hdc,248,100,"12",2);
}
SystemTime_S_XR= X+(int)(Second_R*cos(sc*PI/30-PI/2));
SystemTime_M_XR= X+(int)(Minute_R*cos(m*PI/30-PI/2));
SystemTime_H_XR= X+(int)(Hour_R*cos(h*PI/30-PI/2));
SystemTime_S_YR= Y+(int)(Second_R*sin(sc*PI/30-PI/2));
SystemTime_M_YR= Y+(int)(Minute_R*sin(m*PI/30-PI/2));
SystemTime_H_YR= Y+(int)(Hour_R*sin(h*PI/30-PI/2));
hPen=CreatePen(PS_DOT,4,RGB(150,60,0));
SelectObject(hdc,hPen);
::MoveToEx(hdc,X,Y,NULL);
::LineTo(hdc,SystemTime_M_XR,SystemTime_M_YR);
::MoveToEx(hdc,X,Y,NULL);
::LineTo(hdc,SystemTime_S_XR,SystemTime_S_YR);
::MoveToEx(hdc,X,Y,NULL);
::LineTo(hdc,SystemTime_H_XR,SystemTime_H_YR);
sc++;
if(sc==60)
{
m++;sc=0;
if(m%12==0)
{
h++;
if(m==60)
{
m=0;
if(h==60)
h=0;
}
}
}
ReleaseDC(hWnd,hdc);
break;
}
case WM_DESTROY:
{
PostQuitMessage(0);
::KillTimer(hWnd,1);
break;
}
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}