#include <windows.h> #include <math.h> #define NUM 100 #define TWOPI (2*3.14159) LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow ) { static TCHAR szAppName[]=TEXT("Bezier"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style=CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName=NULL; wndclass.lpszClassName=szAppName; if(!RegisterClass(&wndclass)) { MessageBox(NULL,TEXT("This programe requires windows NT"),szAppName,MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppName, TEXT("Bezier Splines"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } void DrawBezier(HDC hdc,POINT apt[]) { PolyBezier(hdc,apt,4); MoveToEx(hdc,apt[0].x,apt[0].y,NULL); LineTo(hdc,apt[1].x,apt[1].y); MoveToEx(hdc,apt[2].x,apt[2].y,NULL); LineTo(hdc,apt[3].x,apt[3].y); } LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { static int cxClient,cyClient; HDC hdc; PAINTSTRUCT ps; static POINT apt[5]; switch(message) { case WM_SIZE: cxClient=LOWORD(lParam); cyClient=HIWORD(lParam); apt[0].x=cxClient/4; apt[0].y=cyClient/2; apt[1].x=cxClient/2; apt[1].y=cyClient/4; apt[2].x=cxClient/2; apt[2].y=3*cyClient/4; apt[3].x=3*cxClient/4; apt[3].y=cyClient/2; return 0; case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_MOUSEMOVE: if(wParam & MK_LBUTTON||wParam & MK_RBUTTON) { hdc=GetDC(hwnd); SelectObject(hdc,GetStockObject(WHITE_PEN)); DrawBezier(hdc,apt); if(wParam & MK_LBUTTON) { apt[1].x=LOWORD(lParam); apt[1].y=HIWORD(lParam); } if(wParam & MK_RBUTTON) { apt[2].x=LOWORD(lParam); apt[2].y=HIWORD(lParam); } SelectObject(hdc,GetStockObject(BLACK_PEN)); DrawBezier(hdc,apt); ReleaseDC(hwnd,hdc); } return 0; case WM_PAINT: InvalidateRect(hwnd,NULL,TRUE); hdc=BeginPaint(hwnd,&ps); DrawBezier(hdc,apt); EndPaint(hwnd,&ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,wParam,lParam); }
posted on 2009-11-15 11:08 karying 阅读(870) 评论(0) 编辑 收藏 举报
Powered by: 博客园 Copyright © 2025 karying Powered by .NET 9.0 on Kubernetes