PolyBezier

此函式用於畫貝賽爾樣條曲線。貝賽爾樣條是一種非常優美的曲線,廣泛套用於計算機圖形學中。函式PolyBezier和PolyBezierTo用於繪製這種樣條曲線。一條貝賽爾樣條由4個定義點定義:兩個端點和兩個控制點。

基本介紹

  • 中文名:PolyBezier
  • 參數:hdc
  • 原型:BOOL PolyBezier
  • 用於:畫貝賽爾樣條曲線
簡介,舉例說明,

簡介

PolyBezier
● 說明
此函式用於畫貝賽爾樣條曲線。貝賽爾樣條是一種非常優美的曲線,廣泛套用於計算機圖形學中。函式PolyBezier和PolyBezierTo用於繪製這種樣條曲線。一條貝賽爾樣條由4個定義點定義:兩個端點和兩個控制點。
● 原型
BOOL PolyBezier(HDC hdc, CONST POINT *lppt, DWORD cPoints);
● 參數
hdc:指定的設備環境句柄。
lppt:POINT結構數組指針,包括了樣條端點和控制點的坐標,其順序是起點的坐標、起點的控制點的坐標、終點的控制點的坐標和終點的坐標。
cPoints:指明數組中的點的個數。
● 返回值
函式調用成功,則返回非零,否則返回零。

舉例說明

#include<windows.h>LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){staticTCHARszAppName[]=TEXT("SysMets");HWNDhwnd;MSGmsg;WNDCLASSwndclass;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("ProgramrequiresWindowsNT!"),szAppName,MB_ICONERROR);return0;}hwnd=CreateWindow(szAppName,TEXT("GetSystemMetrics"),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);}returnmsg.wParam;}voidDrawBezier(HDChdc,POINTapt[]){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);}LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){staticintcxClient,cyClient;HDChdc;staticPOINTapt[4];PAINTSTRUCTps;switch(message){caseWM_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;break;caseWM_LBUTTONDOWN:caseWM_RBUTTONDOWN:caseWM_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);}return0;caseWM_PAINT:InvalidateRect(hwnd,NULL,TRUE);hdc=BeginPaint(hwnd,&ps);DrawBezier(hdc,apt);EndPaint(hwnd,&ps);return0;caseWM_DESTROY:PostQuitMessage(0);return0;}returnDefWindowProc(hwnd,message,wParam,lParam);}
結果顯示

相關詞條

熱門詞條

聯絡我們