📄 pentacle.cpp
字号:
// Pentacle.cpp: implementation of the CPentacle class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Five.h"
#include "Pentacle.h"
#include <math.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPentacle::CPentacle()
{
m_lColor = RGB(255, 0, 0); // 初始化颜色为红色
m_lWidth = 0;
m_lHigh = 0;
}
CPentacle::~CPentacle()
{
}
//////////////////////////////////////////////////////////////////////
// 计算五角星的各个顶点
// DWORD lHigh 绘画区域的高
// DWORD lWidth 绘画区域的宽
// 返回是否创建点成功
//////////////////////////////////////////////////////////////////////
bool CPentacle::CalculateFivePoint(DWORD lWidth, DWORD lHigh)
{
m_vPointList.clear(); // 清空点列表
m_lHigh = lHigh;
m_lWidth = lWidth;
double dAngle = 90; // 角度, 初始化为正上方
for ( int i = 0; i < 5; i++) {
CPoint point;
point.x = lWidth/2.0 * ( 1 + cos( dAngle / 180 * PI ) );
point.y = lHigh/2.0 * ( 1 - sin( dAngle / 180 * PI ) );
m_vPointList.push_back(point);
// 计算下一个点
dAngle += 360 / 5 * 2; // 如果不*2,那么结果是一个五边形,不是五角星
if ( dAngle > 360 ) {
dAngle -= 360;
}
}
return true;
}
//////////////////////////////////////////////////////////////////////
// 计算其他多边形顶点位置,点顺序
// DWORD lHigh 绘画区域的高
// DWORD lWidth 绘画区域的宽
// int iNumber 创建点的数量,不可以小于3个点
// 返回是否创建点成功
//////////////////////////////////////////////////////////////////////
bool CPentacle::CalculatePoint(DWORD lWidth, DWORD lHigh, int iNumber)
{
m_vPointList.clear(); // 清空点列表
m_lHigh = lHigh;
m_lWidth = lWidth;
double dAngle = 90; // 角度, 初始化为正上方
for ( int i = 0; i < iNumber; i++) {
CPoint point;
point.x = lWidth/2.0 * ( 1 + cos( dAngle / 180 * PI ) );
point.y = lHigh/2.0 * ( 1 - sin( dAngle / 180 * PI ) );
m_vPointList.push_back(point);
// 计算下一个点
dAngle += 360 / iNumber;
if ( dAngle > 360 ) {
dAngle -= 360;
}
}
return true;
return true;
}
//////////////////////////////////////////////////////////////////////
// 绘制图形
// CDC* pDC 绘制图形的设备句柄
// 返回绘制是否成功
//////////////////////////////////////////////////////////////////////
bool CPentacle::Draw(CDC* pDC)
{
// 创建点的列表
int lNum = m_vPointList.size();
CPoint* pList = new CPoint[lNum];
for ( int i = 0; i < lNum; i++ ) {
pList[i] = m_vPointList[i];
}
// 创建多边形区域
CRgn Rgn;
Rgn.CreatePolygonRgn(pList, lNum, WINDING);
pDC->SelectObject(&Rgn);
// 创建画刷
CBrush brush;
brush.CreateSolidBrush(m_lColor);
CBrush* pOldBrush = pDC->SelectObject(&brush);
// 创建画笔
CPen pen;
pen.CreatePen(PS_SOLID, 1, m_lColor);
CPen* pOldPen = pDC->SelectObject(&pen);
pDC->Ellipse(0, 0, m_lWidth, m_lHigh);
pen.DeleteObject();
pDC->SelectObject(pOldPen);
brush.DeleteObject();
pDC->SelectObject(pOldBrush);
Rgn.DeleteObject();
if ( NULL != pList ) {
delete [] pList;
pList = NULL;
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -