⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shape.cpp

📁 C++视图的程序
💻 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 + -