16,473
社区成员
发帖
与我相关
我的任务
分享
#define pai 3.1415
#define IDT_TIME 1
#include<windows.h>
#include<cmath>
void biaopang(HWND&,HDC&);
void zhizheng(HWND& ,HDC&);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
WNDCLASS wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=::LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=::LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hinstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="window";
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
if(::RegisterClass(&wndclass)==NULL)
{
MessageBox(NULL,"class error","错误",MB_OK|MB_ICONWARNING);
}
HWND hwnd=::CreateWindow("window","时钟",WS_OVERLAPPEDWINDOW,100,100,500,500,NULL,NULL,hinstance,NULL);
if(hwnd==NULL)
{
MessageBox(NULL,"window error","错误",MB_OK|MB_ICONWARNING);
}
::ShowWindow(hwnd,SW_SHOW);
::UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam)
{
HDC dc_biao_pang=GetDC(hwnd);
RECT rect;
::GetClientRect(hwnd,&rect);
::SetMapMode(dc_biao_pang,MM_ISOTROPIC);
::SetWindowExtEx(dc_biao_pang,500,500,NULL);
::SetViewportExtEx(dc_biao_pang,500,-500,NULL);
::SetViewportOrgEx(dc_biao_pang,rect.right/2,rect.bottom/2,NULL);
switch(umsg)
{
LPPAINTSTRUCT ps;
case WM_CREATE: ::SetTimer(hwnd,IDT_TIME,100,NULL);
break;
case WM_TIMER:
InvalidateRect(hwnd,NULL,TRUE );
break;
case WM_PAINT:
BeginPaint(hwnd, ps);
biaopang( hwnd,dc_biao_pang);
zhizheng( hwnd,dc_biao_pang);
EndPaint(hwnd, ps);
break;
case WM_DESTROY:
::PostQuitMessage(0);
break;
default:
return ::DefWindowProc(hwnd,umsg,wparam,lparam);
}
return 0;
}
void biaopang(HWND& hwnd,HDC & dc_biao_pang)
{
HPEN pen1;
HBRUSH brush1;
pen1=::CreatePen(PS_SOLID,1,RGB(0,0,0));
::SelectObject(dc_biao_pang,pen1);
::Ellipse(dc_biao_pang,-230,230,230,-230);
double x0=0;
double y0=220;
double x_temp=0;
double y_temp=220;
double r1=220;
double hudu= pai/6;
brush1=::CreateSolidBrush(RGB(255,0,0));
::SelectObject(dc_biao_pang,brush1);
for(int i=1;i<=12;i++)
{
x_temp=r1*cos(hudu*i);
y_temp=r1*sin(hudu*i);
::Ellipse(dc_biao_pang,(int)x_temp-10,(int)y_temp+10,(int)x_temp+10,(int)y_temp-10);
}
brush1=::CreateSolidBrush(RGB(0,0,0));
::SelectObject(dc_biao_pang,brush1);
::Ellipse(dc_biao_pang,10,10,-10,-10);
}
void zhizheng(HWND& hwnd,HDC& dc_biao_pang)
{
HDC dc_hour=dc_biao_pang;
HDC dc_minute=dc_biao_pang;
HDC dc_second=dc_biao_pang;
HPEN pen_hour=CreatePen(PS_SOLID,5,RGB(255,0,0));
HPEN pen_minute=CreatePen(PS_SOLID,3,RGB(0,255,0));
HPEN pen_second=CreatePen(PS_SOLID,1,RGB(0,0,255));
POINT hour;
POINT minute ;
POINT second ;
double r_hour=100;
double r_minute=150;
double r_second=200;
SYSTEMTIME systemtime;
::GetLocalTime(&systemtime);
hour.x=(LONG)(r_hour*sin(2*pai*systemtime.wHour/12+pai/6*systemtime.wMinute/60));
hour.y=(LONG)(r_hour*cos(2*pai*systemtime.wHour/12+pai/6*systemtime.wMinute/60));
minute.x=(LONG)(r_minute*sin(2*pai*systemtime.wMinute/60));
minute.y=(LONG)(r_minute*cos(2*pai*systemtime.wMinute/60));
second.x=(LONG)(r_second*sin(2*pai*systemtime.wSecond/60));
second.y=(LONG)(r_second*cos(2*pai*systemtime.wSecond/60));
::SelectObject(dc_hour,pen_hour);
::MoveToEx(dc_hour,0,0,NULL);
::LineTo(dc_hour,hour.x,hour.y);
::SelectObject(dc_minute,pen_minute);
::MoveToEx(dc_minute,0,0,NULL);
::LineTo(dc_minute,minute.x,minute.y);
::SelectObject(dc_second,pen_second);
::MoveToEx(dc_second,0,0,NULL);
::LineTo(dc_second,second.x,second.y);
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam)
{
HDC dc_biao_pang=GetDC(hwnd);//注意你的这一句话
RECT rect;
::GetClientRect(hwnd,&rect);
::SetMapMode(dc_biao_pang,MM_ISOTROPIC);
::SetWindowExtEx(dc_biao_pang,500,500,NULL);
::SetViewportExtEx(dc_biao_pang,500,-500,NULL);
::SetViewportOrgEx(dc_biao_pang,rect.right/2,rect.bottom/2,NULL);
switch(umsg)
{
LPPAINTSTRUCT ps;
case WM_CREATE: ::SetTimer(hwnd,IDT_TIME,100,NULL);
break;
case WM_TIMER:
InvalidateRect(hwnd,NULL,TRUE );
break;
case WM_PAINT:
BeginPaint(hwnd, ps);
biaopang( hwnd,dc_biao_pang);
zhizheng( hwnd,dc_biao_pang);
EndPaint(hwnd, ps);
break;
case WM_DESTROY:
::PostQuitMessage(0);
break;
default:
return ::DefWindowProc(hwnd,umsg,wparam,lparam);
}
return 0;
}
#define pai 3.1415
#define IDT_TIME 1
#include<windows.h>
#include<cmath>
void biaopang(HWND&,HDC&);
void zhizheng(HWND& ,HDC&);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
WNDCLASS wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=::LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=::LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hinstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="window";
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
if(::RegisterClass(&wndclass)==NULL)
{
MessageBox(NULL,"class error","错误",MB_OK|MB_ICONWARNING);
}
HWND hwnd=::CreateWindow("window","时钟",WS_OVERLAPPEDWINDOW,100,100,500,500,NULL,NULL,hinstance,NULL);
if(hwnd==NULL)
{
MessageBox(NULL,"window error","错误",MB_OK|MB_ICONWARNING);
}
::ShowWindow(hwnd,SW_SHOW);
::UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam)
{
switch(umsg)
{
PAINTSTRUCT ps;
case WM_CREATE:
::SetTimer(hwnd,IDT_TIME,100,NULL);
break;
case WM_TIMER:
{
InvalidateRect(hwnd,NULL,FALSE );
break;
}
case WM_PAINT:
{
HDC dc_biao_pang = GetDC(hwnd);
RECT rect;
::GetClientRect(hwnd,&rect);
::SetMapMode(dc_biao_pang,MM_ISOTROPIC);
::SetWindowExtEx(dc_biao_pang,500,500,NULL);
::SetViewportExtEx(dc_biao_pang,500,-500,NULL);
::SetViewportOrgEx(dc_biao_pang,rect.right/2,rect.bottom/2,NULL);
BeginPaint(hwnd, &ps); //PAINTSTRUCT ps;要这样定义 如果定义成LPPAINTSTRUCT ps;就成了指针了,需要new出来
biaopang( hwnd,dc_biao_pang);
zhizheng( hwnd,dc_biao_pang);
EndPaint(hwnd, &ps);
::DeleteDC(dc_biao_pang);
break;
}
case WM_DESTROY:
::PostQuitMessage(0);
break;
default:
return ::DefWindowProc(hwnd,umsg,wparam,lparam);
}
return 0;
}
void biaopang(HWND& hwnd,HDC & dc_biao_pang)
{
HPEN pen1;
HBRUSH brush1;
pen1=::CreatePen(PS_SOLID,1,RGB(0,0,0));
::SelectObject(dc_biao_pang,pen1);
::Ellipse(dc_biao_pang,-230,230,230,-230);
double x0=0;
double y0=220;
double x_temp=0;
double y_temp=220;
double r1=220;
double hudu= pai/6;
brush1=::CreateSolidBrush(RGB(255,0,0));
::SelectObject(dc_biao_pang,brush1);
for(int i=1;i<=12;i++)
{
x_temp=r1*cos(hudu*i);
y_temp=r1*sin(hudu*i);
::Ellipse(dc_biao_pang,(int)x_temp-10,(int)y_temp+10,(int)x_temp+10,(int)y_temp-10);
}
brush1=::CreateSolidBrush(RGB(0,0,0));
::SelectObject(dc_biao_pang,brush1);
::Ellipse(dc_biao_pang,10,10,-10,-10);
::DeleteObject(pen1); //清理资源
::DeleteObject(brush1);
}
void zhizheng(HWND& hwnd,HDC& dc_biao_pang)
{
HDC dc_hour=dc_biao_pang;
HDC dc_minute=dc_biao_pang;
HDC dc_second=dc_biao_pang;
HPEN pen_hour=CreatePen(PS_SOLID,5,RGB(255,0,0));
HPEN pen_minute=CreatePen(PS_SOLID,3,RGB(0,255,0));
HPEN pen_second=CreatePen(PS_SOLID,1,RGB(0,0,255));
POINT hour;
POINT minute ;
POINT second ;
double r_hour=100;
double r_minute=150;
double r_second=200;
SYSTEMTIME systemtime;
::GetLocalTime(&systemtime);
hour.x=(LONG)(r_hour*sin(2*pai*systemtime.wHour/12+pai/6*systemtime.wMinute/60));
hour.y=(LONG)(r_hour*cos(2*pai*systemtime.wHour/12+pai/6*systemtime.wMinute/60));
minute.x=(LONG)(r_minute*sin(2*pai*systemtime.wMinute/60));
minute.y=(LONG)(r_minute*cos(2*pai*systemtime.wMinute/60));
second.x=(LONG)(r_second*sin(2*pai*systemtime.wSecond/60));
second.y=(LONG)(r_second*cos(2*pai*systemtime.wSecond/60));
::SelectObject(dc_hour,pen_hour);
::MoveToEx(dc_hour,0,0,NULL);
::LineTo(dc_hour,hour.x,hour.y);
::SelectObject(dc_minute,pen_minute);
::MoveToEx(dc_minute,0,0,NULL);
::LineTo(dc_minute,minute.x,minute.y);
::SelectObject(dc_second,pen_second);
::MoveToEx(dc_second,0,0,NULL);
::LineTo(dc_second,second.x,second.y);
::DeleteDC(dc_hour); //清理GDI资源
::DeleteDC(dc_minute);
::DeleteDC(dc_second);
::DeleteObject(pen_hour);
::DeleteObject(pen_minute);
::DeleteObject(pen_second);
}
多了就不说了,楼上的已经说了很多了。