69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
#define HUDU(a) ((a)*3.1415926/180)
#define R 100
#define r 4
char szAppName[]="NENC";
HINSTANCE hInst;
HWND hWnd;
class _Clock
{
public:
char szBuffer[128];
POINT pt;//位置坐标
float fH;//时
float fM;//分
float fS;//秒
RECT rt;
void run(int n){};
void run(float f)
{
fS+=f;
if((fS>=60)||(fS<0))
{
fS+=60;
while(fS>=60)fS-=60;
fM+=f>0?1:-1;
if((fM>=60)||(fM<0))
{
fM+=60;
while(fM>=60)fM-=60;
fH+=f>0?1:-1;
if((fH>=24)||(fH<0))
{
fH+=24;
while(fH>=24)fH-=24;
}
}
}
}
virtual void Draw(HDC hdc)
{
POINT pt1;
float fJiaoDu=0;
Ellipse(hdc,pt.x-R,pt.y-R,pt.x+R,pt.y+R);
for (int i=0;i<60;i++)
{
pt1.x=pt.x+(R-r)*sin(HUDU(fJiaoDu));
pt1.y=pt.y-(R-r)*cos(HUDU(fJiaoDu));
fJiaoDu+=6;
if(i%5==0)
SelectObject(hdc,GetStockObject(BLACK_BRUSH));
else
SelectObject(hdc,GetStockObject(WHITE_BRUSH));
Ellipse(hdc,pt1.x-r,pt1.y-r,pt1.x+r,pt1.y+r);
}
wsprintf(szBuffer,"%02d:%02d:%02d",(int)fH,(int)fM,(int)fS);
TextOut(hdc,pt.x,pt.y-R-25,szBuffer,strlen(szBuffer));
}
RECT* Rect(){SetRect(&rt,pt.x-R,pt.y-R,pt.x+R,pt.y+R);return &rt;};
};
class _c1:public _Clock//机械式
{
public:
void Draw(HDC hdc)
{
_Clock::Draw(hdc);
float fJiaoDu;
POINT pt1;
HPEN hPen;
hPen=CreatePen(1,4,0xff00);
hPen=(HPEN)SelectObject(hdc,hPen);
fJiaoDu=fM*6+fS/10;
pt1.x=pt.x+R*4/5*sin(HUDU(fJiaoDu));
pt1.y=pt.y-R*4/5*cos(HUDU(fJiaoDu));
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//分
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"分针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-75,szBuffer,strlen(szBuffer));
hPen=CreatePen(1,6,0xff);
hPen=(HPEN)SelectObject(hdc,hPen);
fJiaoDu=fH*30+fM/2+fS/120;
pt1.x=pt.x+R*17/30*sin(HUDU(fJiaoDu));
pt1.y=pt.y-R*17/30*cos(HUDU(fJiaoDu));
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//时
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"时针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-100,szBuffer,strlen(szBuffer));
fJiaoDu=fS*6;
pt1.x=pt.x+(R-r)*sin(HUDU(fJiaoDu));
pt1.y=pt.y-(R-r)*cos(HUDU(fJiaoDu));
hPen=CreatePen(1,2,0xff0000);
hPen=(HPEN)SelectObject(hdc,hPen);
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//秒
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"秒针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-50,szBuffer,strlen(szBuffer));
}
};
class _c2:public _Clock//秒跳式
{
public:
void Draw(HDC hdc)
{
_Clock::Draw(hdc);
float fJiaoDu;
POINT pt1;
HPEN hPen;
hPen=CreatePen(1,4,0xff00);
hPen=(HPEN)SelectObject(hdc,hPen);
fJiaoDu=fM*6+fS/10;
pt1.x=pt.x+R*4/5*sin(HUDU(fJiaoDu));
pt1.y=pt.y-R*4/5*cos(HUDU(fJiaoDu));
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//分
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"分针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-75,szBuffer,strlen(szBuffer));
hPen=CreatePen(1,6,0xff);
hPen=(HPEN)SelectObject(hdc,hPen);
fJiaoDu=fH*30+fM/2+fS/120;
pt1.x=pt.x+R*17/30*sin(HUDU(fJiaoDu));
pt1.y=pt.y-R*17/30*cos(HUDU(fJiaoDu));
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//时
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"时针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-100,szBuffer,strlen(szBuffer));
fJiaoDu=(int)fS*6;
pt1.x=pt.x+(R-r)*sin(HUDU(fJiaoDu));
pt1.y=pt.y-(R-r)*cos(HUDU(fJiaoDu));
hPen=CreatePen(1,2,0xff0000);
hPen=(HPEN)SelectObject(hdc,hPen);
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//秒
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"秒针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-50,szBuffer,strlen(szBuffer));
}
};
class _c3:public _Clock//分跳式
{
public:
void Draw(HDC hdc)
{
_Clock::Draw(hdc);
float fJiaoDu;
POINT pt1;
HPEN hPen;
hPen=CreatePen(1,4,0xff00);
hPen=(HPEN)SelectObject(hdc,hPen);
fJiaoDu=(int)fM*6;
pt1.x=pt.x+R*4/5*sin(HUDU(fJiaoDu));
pt1.y=pt.y-R*4/5*cos(HUDU(fJiaoDu));
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//分
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"分针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-75,szBuffer,strlen(szBuffer));
hPen=CreatePen(1,6,0xff);
hPen=(HPEN)SelectObject(hdc,hPen);
fJiaoDu=fH*30+fM/2+fS/120;
pt1.x=pt.x+R*17/30*sin(HUDU(fJiaoDu));
pt1.y=pt.y-R*17/30*cos(HUDU(fJiaoDu));
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//时
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"时针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-100,szBuffer,strlen(szBuffer));
fJiaoDu=(int)fS*6;
pt1.x=pt.x+(R-r)*sin(HUDU(fJiaoDu));
pt1.y=pt.y-(R-r)*cos(HUDU(fJiaoDu));
hPen=CreatePen(1,2,0xff0000);
hPen=(HPEN)SelectObject(hdc,hPen);
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//秒
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"秒针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-50,szBuffer,strlen(szBuffer));
}
};
class _c4:public _Clock//时跳式
{
public:
void Draw(HDC hdc)
{
_Clock::Draw(hdc);
float fJiaoDu;
POINT pt1;
HPEN hPen;
hPen=CreatePen(1,4,0xff00);
hPen=(HPEN)SelectObject(hdc,hPen);
fJiaoDu=(int)fM*6;
pt1.x=pt.x+R*4/5*sin(HUDU(fJiaoDu));
pt1.y=pt.y-R*4/5*cos(HUDU(fJiaoDu));
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//分
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"分针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-75,szBuffer,strlen(szBuffer));
hPen=CreatePen(1,6,0xff);
hPen=(HPEN)SelectObject(hdc,hPen);
fJiaoDu=(int)fH*30;
pt1.x=pt.x+R*17/30*sin(HUDU(fJiaoDu));
pt1.y=pt.y-R*17/30*cos(HUDU(fJiaoDu));
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//时
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"时针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-100,szBuffer,strlen(szBuffer));
fJiaoDu=(int)fS*6;
pt1.x=pt.x+(R-r)*sin(HUDU(fJiaoDu));
pt1.y=pt.y-(R-r)*cos(HUDU(fJiaoDu));
hPen=CreatePen(1,2,0xff0000);
hPen=(HPEN)SelectObject(hdc,hPen);
MoveToEx(hdc,pt.x,pt.y,NULL);
LineTo(hdc,pt1.x,pt1.y);//秒
DeleteObject(SelectObject(hdc,hPen));
sprintf(szBuffer,"秒针度数:%.2f",fJiaoDu);
TextOut(hdc,pt.x,pt.y-R-50,szBuffer,strlen(szBuffer));
}
};
_Clock *pClock[4];
LRESULT WINAPI WndPro(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lparam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
hInst=hInstance;
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_QUESTION);
wc.hInstance=hInstance;
wc.lpfnWndProc=WndPro;
wc.lpszClassName=szAppName;
wc.lpszMenuName=NULL;
wc.style=CS_VREDRAW|CS_HREDRAW;
RegisterClass(&wc);
hWnd=CreateWindow(szAppName,szAppName,WS_SYSMENU,
0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),
NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
char *pc[4]=
{
"连续","秒针单步","分针单步","时针单步"
};
LRESULT WINAPI WndPro(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lparam)
{
HDC hdc;
PAINTSTRUCT ps;
static HDC hdcMem;
static HBITMAP hBitMap;
static int cx,cy;
int i;
float f;
POINT ptMouse;
char szBuffer[12];
switch(msg)
{
case WM_CREATE:
hdcMem=CreateCompatibleDC(NULL);
pClock[0]=new _c1;
pClock[1]=new _c2;
pClock[2]=new _c3;
pClock[3]=new _c4;
SetTimer(hWnd,1,20,NULL);
break;
case WM_TIMER:
PatBlt(hdcMem,0,0,cx,cy,WHITENESS);
f=0.1;
for (i=0;i<4;i++)
{
pClock[i]->Draw(hdcMem);
TextOut(hdcMem,pClock[i]->pt.x,pClock[i]->pt.y+R,pc[i],strlen(pc[i]));
pClock[i]->run(f);
}
hdc=GetDC(hWnd);
BitBlt(hdc,0,0,cx,cy,hdcMem,0,0,SRCCOPY);
ReleaseDC(hWnd,hdc);
break;
case WM_SIZE:
cx=LOWORD(lparam);
cy=HIWORD(lparam);
for (i=0;i<4;i++)
{
pClock[i]->pt.x=cx/5*(i+1);
pClock[i]->pt.y=cy*3/4;
pClock[i]->Rect();
}
hdc=GetDC(hWnd);
hBitMap=CreateCompatibleBitmap(hdc,cx,cy);
SelectObject(hdcMem,hBitMap);
SelectObject(hdcMem,GetStockObject(WHITE_BRUSH));
SetTextAlign(hdcMem,TA_CENTER);
ReleaseDC(hWnd,hdc);
break;
case WM_LBUTTONDOWN:
ptMouse.x=LOWORD(lparam);
ptMouse.y=HIWORD(lparam);
break;
case WM_RBUTTONDOWN:
ptMouse.x=LOWORD(lparam);
ptMouse.y=HIWORD(lparam);
break;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,msg,wParam,lparam);
}
#define SEC_12HOUR (12 * 60 * 60)
#define SEC_60MIN (60 * 60)
#define SEC_1MIN (60)
int main(int argc, char* argv[])
{
DWORD num(0) ;
DWORD dwsec(0) ;
DWORD desec_hour , dwdec_min , dwsec_sec ;
for ( dwsec = 0 ; dwsec < SEC_12HOUR ; dwsec ++ )
{
dwsec_sec = dwsec%SEC_1MIN ;
dwdec_min = (dwsec%SEC_60MIN)/(SEC_60MIN/60) ;
desec_hour= dwsec/(SEC_12HOUR/60) ;
if ( (desec_hour == dwdec_min) && (dwsec_sec == dwdec_min) )
{
num ++ ;
printf( "No.%d->%02d:%02d:%02d\n" , num ,
dwsec/(60*60) , (dwsec%SEC_60MIN)/60 , dwsec%SEC_1MIN ) ;
}
}
return 0;
}