【C】五边形绘制(续)

要求:

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

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

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

#include
#include
#include
#include
#define PI 3.1415926

long 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));
	}
}

【C】五边形绘制(续)_第1张图片

你可能感兴趣的:(C)