📄 shape.cpp
字号:
//shap.cpp
#include "stdafx.h"
#include "shape.h"
#include "math.h"
//以下为第二章所用的类实现
enum {PEN_STYLE_SOLID,PEN_STYLE_DASH,PEN_STYLE_DOT};
enum {Perspective,Parallel} Projection;
//CShape
IMPLEMENT_SERIAL(CShape,CObject,1)
void CShape::Serialize(CArchive &ar)
{
if(ar.IsStoring())
ar<<m_pColor<<m_pWidth<<m_pStyle;
else
ar>>m_pColor>>m_pWidth>>m_pStyle;
}
//CLine
IMPLEMENT_SERIAL(CLine,CShape,1)
CLine::CLine(CPoint pStart,CPoint pEnd,int Width,int Style,COLORREF Color)
{
m_pStart=pStart;
m_pEnd=pEnd;
m_pWidth=Width;
m_pStyle=Style;
m_pColor=Color;
}
void CLine::Drawing(CDC *pDC)
{
CPen NewPen,*pOldPen;
NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor);
pOldPen=pDC->SelectObject(&NewPen);
pDC->MoveTo(m_pStart);
pDC->LineTo(m_pEnd);
pDC->SelectObject(pOldPen);
}
void CLine::Serialize(CArchive &ar)
{
if(ar.IsStoring())
ar<<m_pStart.x<<m_pStart.y
<<m_pEnd.x<<m_pEnd.y;
else
ar>>m_pStart.x>>m_pStart.y
>>m_pEnd.x>>m_pEnd.y;
CShape::Serialize(ar);
}
//CBezier
IMPLEMENT_SERIAL(CBezier,CShape,1)
CBezier::CBezier(CPoint points[20],int n,int Width,int Style,COLORREF Color)
{
m_pNum=n;
for(int i=0;i<n;i++)
m_pPoints[i]=points[i];
m_pWidth=Width;
m_pStyle=Style;
m_pColor=Color;
}
void CBezier::Drawing(CDC *pDC)
{
CPen NewPen,*pOldPen;
NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor);
pOldPen=pDC->SelectObject(&NewPen);
pDC->PolyBezier(m_pPoints,m_pNum);
pDC->SelectObject(pOldPen);
}
void CBezier::Serialize(CArchive &ar)
{
int i;
if(ar.IsStoring())
{
ar<<m_pNum;
for(i=0;i<m_pNum;i++)
ar<<m_pPoints[i];
}
else
{ ar>>m_pNum;
for(i=0;i<m_pNum;i++)
ar>>m_pPoints[i];
}
CShape::Serialize(ar);
}
//CRectangle
IMPLEMENT_SERIAL(CRectangle,CShape,1)
CRectangle::CRectangle(CPoint pFP,CPoint pSP,int Width,int Style,COLORREF Color,
int FFlag,COLORREF FColor,int HFlag,int HPattern)
{
m_pFP=pFP; m_pSP=pSP;
m_pWidth=Width;
m_pStyle=Style;
m_pColor=Color;
m_FFlag=FFlag;
m_FColor=FColor;
m_HFlag=HFlag;
m_HPattern=HPattern;
}
void CRectangle::Drawing(CDC *pDC)
{
CPen NewPen,*pOldPen;
NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor);
pOldPen=pDC->SelectObject(&NewPen);
pDC->SelectStockObject(NULL_BRUSH);
CBrush NewBrush,*pOldBrush;
if(m_FFlag)
{
if(m_HFlag==0)
NewBrush.CreateSolidBrush(m_FColor);
else
NewBrush.CreateHatchBrush(m_HPattern,m_FColor);
pOldBrush=pDC->SelectObject(&NewBrush);
}
pDC->Rectangle(m_pFP.x,m_pFP.y,m_pSP.x,m_pSP.y);
pDC->SelectObject(pOldPen);
if(m_FFlag) pDC->SelectObject(pOldBrush);
}
void CRectangle::Serialize(CArchive &ar)
{
if(ar.IsStoring())
ar<<m_pFP.x<<m_pFP.y<<m_pSP.x<<m_pSP.y
<<m_FFlag<<m_FColor<<m_HFlag<<m_HPattern;
else
ar>>m_pFP.x>>m_pFP.y>>m_pSP.x>>m_pSP.y
>>m_FFlag>>m_FColor>>m_HFlag>>m_HPattern;
CShape::Serialize(ar);
}
//CCircle
IMPLEMENT_SERIAL(CCircle,CShape,1)
CCircle::CCircle(CPoint pFP,CPoint pSP,int Width,int Style,COLORREF Color,
int FFlag,COLORREF FColor,int HFlag,int HPattern)
{
m_pFP=pFP; m_pSP=pSP;
m_pWidth=Width;
m_pStyle=Style;
m_pColor=Color;
m_FFlag=FFlag;
m_FColor=FColor;
m_HFlag=HFlag;
m_HPattern=HPattern;
}
void CCircle::Drawing(CDC *pDC)
{
CPen NewPen,*pOldPen;
NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor);
pOldPen=pDC->SelectObject(&NewPen);
pDC->SelectStockObject(NULL_BRUSH);
CBrush NewBrush,*pOldBrush;
if(m_FFlag)
{
if(m_HFlag==0)
NewBrush.CreateSolidBrush(m_FColor);
else
NewBrush.CreateHatchBrush(m_HPattern,m_FColor);
pOldBrush=pDC->SelectObject(&NewBrush);
}
pDC->Ellipse(m_pFP.x,m_pFP.y,m_pSP.x,m_pSP.y);
pDC->SelectObject(pOldPen);
if(m_FFlag) pDC->SelectObject(pOldBrush);
}
void CCircle::Serialize(CArchive &ar)
{
if(ar.IsStoring())
ar<<m_pFP.x<<m_pFP.y<<m_pSP.x<<m_pSP.y
<<m_FFlag<<m_FColor<<m_HFlag<<m_HPattern;
else
ar>>m_pFP.x>>m_pFP.y>>m_pSP.x>>m_pSP.y
>>m_FFlag>>m_FColor>>m_HFlag>>m_HPattern;
CShape::Serialize(ar);
}
//CEllipse
IMPLEMENT_SERIAL(CEllipse,CShape,1)
CEllipse::CEllipse(CPoint pFP,CPoint pSP,int Width,int Style,COLORREF Color,
int FFlag,COLORREF FColor,int HFlag,int HPattern)
{
m_pFP=pFP; m_pSP=pSP;
m_pWidth=Width;
m_pStyle=Style;
m_pColor=Color;
m_FFlag=FFlag;
m_FColor=FColor;
m_HFlag=HFlag;
m_HPattern=HPattern;
}
void CEllipse::Drawing(CDC *pDC)
{
CPen NewPen,*pOldPen;
NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor);
pOldPen=pDC->SelectObject(&NewPen);
pDC->SelectStockObject(NULL_BRUSH);
CBrush NewBrush,*pOldBrush;
if(m_FFlag)
{
if(m_HFlag==0)
NewBrush.CreateSolidBrush(m_FColor);
else
NewBrush.CreateHatchBrush(m_HPattern,m_FColor);
pOldBrush=pDC->SelectObject(&NewBrush);
}
pDC->Ellipse(m_pFP.x,m_pFP.y,m_pSP.x,m_pSP.y);
pDC->SelectObject(pOldPen);
if(m_FFlag) pDC->SelectObject(pOldBrush);
}
void CEllipse::Serialize(CArchive &ar)
{
if(ar.IsStoring())
ar<<m_pFP.x<<m_pFP.y<<m_pSP.x<<m_pSP.y
<<m_FFlag<<m_FColor<<m_HFlag<<m_HPattern;
else
ar>>m_pFP.x>>m_pFP.y>>m_pSP.x>>m_pSP.y
>>m_FFlag>>m_FColor>>m_HFlag>>m_HPattern;
CShape::Serialize(ar);
}
//CPolygon
IMPLEMENT_SERIAL(CPolygon,CShape,1)
CPolygon::CPolygon(CPoint points[20],int n,int Width,int Style,COLORREF Color,
int FFlag,COLORREF FColor,int HFlag,int HPattern)
{
m_pNum=n;
for(int i=0;i<n;i++)
m_pPoints[i]=points[i];
m_pWidth=Width;
m_pStyle=Style;
m_pColor=Color;
m_FFlag=FFlag;
m_FColor=FColor;
m_HFlag=HFlag;
m_HPattern=HPattern;
}
void CPolygon::Drawing(CDC *pDC)
{
CPen NewPen,*pOldPen;
NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor);
pOldPen=pDC->SelectObject(&NewPen);
pDC->SelectStockObject(NULL_BRUSH);
if(m_FFlag)
{
CBrush NewBrush,*pOldBrush;
if(m_HFlag==0)
NewBrush.CreateSolidBrush(m_pColor);
else
NewBrush.CreateHatchBrush(m_HPattern,m_FColor);
pOldBrush=pDC->SelectObject(&NewBrush);
pDC->Polygon(m_pPoints,m_pNum);
pDC->SelectObject(pOldBrush);
}
else
pDC->Polygon(m_pPoints,m_pNum);
pDC->SelectObject(pOldPen);
}
void CPolygon::Serialize(CArchive &ar)
{
int i;
if(ar.IsStoring())
{
ar<<m_pNum;
for(i=0;i<m_pNum;i++)
ar<<m_pPoints[i];
ar<<m_FFlag<<m_FColor<<m_HFlag<<m_HPattern;
}
else
{ ar>>m_pNum;
for(i=0;i<m_pNum;i++)
ar>>m_pPoints[i];
ar>>m_FFlag>>m_FColor>>m_HFlag>>m_HPattern;
}
CShape::Serialize(ar);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -