【C】五边形绘制(续)

来源:互联网 发布:安迪沃霍尔知乎 编辑:程序博客网 时间:2024/05/14 08:58

要求:

1.定义一只红色的画笔,绘制一个等边五边形;

2.用不同颜色的线条连接互不相邻的两个点;

3.用不同的画刷颜色填充用上述方法所形成的图形中的每一个区域。

#include<windows.h>#include<stdlib.h>#include<string.h>#include<math.h>#define PI 3.1415926long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){MSG Message;HWND hwnd;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 = "SS";wndclass.lpszMenuName = NULL;wndclass.style = 0;if(!RegisterClass(&wndclass)){MessageBeep(0);return FALSE;}hwnd = CreateWindow("SS","五边形",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);while(GetMessage(&Message,0,0,0)){TranslateMessage(&Message);DispatchMessage(&Message);}return Message.wParam;}long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam){HDC hDC;HBRUSH hBrush;HPEN hPen;PAINTSTRUCT PtStr;int i=0,j=0;//外五边形顶点POINT ww[5];//内五边形顶点POINT nw[5];//三角形顶点POINT s[3];//两点连线POINT line[2];//外圆半径double rw = 200.0;//内圆半径double rn = rw*sin(PI/180*18)/cos(PI/180*36);//计算顶点的值for(i=0;i<5;i++){ww[i].x = (long)(rw*cos(i*72.0/180*PI));ww[i].y = (long)(rw*sin(i*72.0/180*PI));nw[i].x = (long)(rn*cos(i*72.0/180*PI+36.0/180*PI));nw[i].y = (long)(rn*sin(i*72.0/180*PI+36.0/180*PI));}switch(iMessage){case WM_PAINT:hDC = BeginPaint(hWnd,&PtStr);SetMapMode(hDC,MM_ANISOTROPIC);//设置原点坐标(-300,-200)SetWindowOrgEx(hDC,-300,-200,NULL);hPen = CreatePen(PS_SOLID,1,RGB(255,0,0));SelectObject(hDC,hPen);//1.绘制外五边形Polygon(hDC,ww,5);//2.不相邻点连线for(j=0;j<5;j++){DeleteObject(hPen);//不同颜色的画笔hPen = CreatePen(PS_SOLID,1,RGB((j*50)%255,(j*30)%255,(j*20)%255));SelectObject(hDC,hPen);line[0] = ww[j%5];line[1] = ww[(j+2)%5];Polyline(hDC,line,2);Sleep(1000);}//3.用不同的画刷颜色填充用上述方法所形成的图形中的每一个区域//3.1画拥有两个外圆顶点的三角形for(i=0;i<5;i++){s[0] = ww[i%5];s[1] = nw[i%5];s[2] = ww[(i+1)%5];hBrush = CreateSolidBrush(RGB((i* 80) % 255 , (i * 60) % 255 , (i * 40)% 255));SelectObject(hDC , hBrush);Polygon(hDC,s,3);Sleep(100);}//3.2画拥有一个外圆顶点for (i = 0 ; i <5 ; i++){if(i-1 == -1){s[0] = ww[i%5];s[1] = nw[(i)%5];s[2] = nw[(4)%5];}else{s[0] = ww[i%5];s[1] = nw[(i)%5];s[2] = nw[(i-1)%5];}DeleteObject(hPen);hBrush = CreateSolidBrush(RGB((89 + i * 80) % 255 , (70 + i * 60) % 255 , (130 + i * 60)% 255));SelectObject(hDC,hBrush);Polygon(hDC,s,3);Sleep(100);}//3.3画中间的五边形hBrush = CreateSolidBrush(RGB(255,0,0));SelectObject(hDC , hBrush);Polygon(hDC,nw,5);DeleteObject(hPen);DeleteObject(hBrush);EndPaint(hWnd,&PtStr);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;default:return(DefWindowProc(hWnd,iMessage,wParam,lParam));}}


0 0