要求:
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));
}
}