第五章 BEZIER
2013-04-04 22:22
155 查看
#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); }
相关文章推荐
- 数据结构与算法JavaScript描述[第五章](队列)
- 第五章
- 问题五十四:怎么用ray tracing画参数方程表示的曲面(2)—— bezier surface
- Prism4文档翻译(第五章 第一部分)
- 第五章——认识媒体:为你的页面增加图像
- Linux网络管理员手册(5) 第五章 配置TCP/IP网络 proc文件系统 设置主机名 分配IP地址 IP的接口配置 以太网接口
- 第五章 编写程序---超强力方法
- 第五章 卡耐基驾驭竞争与合作 三 征服畏惧建立自信
- head first python第五章
- The C++ Programming Language 第五章 作业
- python开发技术详解---第五章:模块与函数
- 程序员法则- 第五章 统帅
- Vulkan编程指南翻译 第五章 展现 第3节 交换链
- > 第五章 宝剑出鞘
- C Primer Plus 第五章 编程练习 1-8题
- 第五章 命名规范
- 疯狂JAVA——第五章 面向对象(上)
- 想做Bezier动画,可惜弄出来这个差远了。
- 第五章 语句
- 第五章 局域网软件