第五章 BEZIER

来源:互联网 发布:mac微信能视频吗 编辑:程序博客网 时间:2024/05/16 16:55
#include<windows.h>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){static TCHAR szAppName[]=TEXT("BEZIER");HWND hWnd;tagMSG msg;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=szAppName;wndclass.lpszMenuName=NULL;wndclass.style=CS_HREDRAW|CS_VREDRAW;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("注册类错误!!"),szAppName,MB_ICONERROR);return 0;}hWnd=CreateWindow(szAppName,TEXT("EXAMPLE BEZIER"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hWnd,nShowCmd);UpdateWindow(hWnd);while(GetMessage(&msg,hWnd,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 POINT apt[4];HDC hdc;static int cxClient,cyClient;PAINTSTRUCT ps;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);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hWnd,message,wParam,lParam);}

原创粉丝点击