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

📄 myvc2view.cpp

📁 Is very popular C++ program
💻 CPP
字号:
// MyVC2View.cpp : implementation of the CMyVC2View class
//

#include "stdafx.h"
#include "MyVC2.h"

#include "MyVC2Doc.h"
#include "MyVC2View.h"
#include "math.h"               // 添加MFC计算类头文件math.h预编译指令 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyVC2View

IMPLEMENT_DYNCREATE(CMyVC2View, CView)

BEGIN_MESSAGE_MAP(CMyVC2View, CView)
	//{{AFX_MSG_MAP(CMyVC2View)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyVC2View construction/destruction

CMyVC2View::CMyVC2View()
{
	// TODO: add construction code here

}

CMyVC2View::~CMyVC2View()
{
}

BOOL CMyVC2View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMyVC2View drawing

void CMyVC2View::OnDraw(CDC* pDC)
{
	CMyVC2Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

   //设置逻辑坐标并调用各图形绘制子函数
	CRect rect;
	GetClientRect(&rect);
	pDC->SetMapMode(MM_LOMETRIC);
	pDC->SetViewportOrg(int(rect.right/2),int(rect.bottom/2));
	FillRect0(pDC,RGB(192,192,192),(0,0),700,500);
	Rectangle0(pDC,-700,0,0,-500,RGB(128,128,128));
	Ellipses(pDC,-300,500,0,0,1,RGB(192,192,192),LTGRAY_BRUSH);
	Ellipsem(pDC,-500,250,200,RGB(192,192,192));

	Line0(pDC,-700,-500,700,-500,4,RGB(255,0,0));
    Line0(pDC,-700,-500,700,500,4,RGB(0,255,0));
	Ellipses(pDC,-500,350,500,-350,4,RGB(0,0,0),NULL_BRUSH);
	Arc0(pDC,0,0,350,4,RGB(0,0,255));
	Arcl(pDC,100,0,950,140,220,4,RGB(0,0,0));
	Arcl(pDC,-100,0,950,-40,40,4,RGB(0,0,0));




}

/////////////////////////////////////////////////////////////////////////////
// CMyVC2View printing

BOOL CMyVC2View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CMyVC2View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMyVC2View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CMyVC2View diagnostics

#ifdef _DEBUG
void CMyVC2View::AssertValid() const
{
	CView::AssertValid();
}

void CMyVC2View::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMyVC2Doc* CMyVC2View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyVC2Doc)));
	return (CMyVC2Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMyVC2View message handlers



// 画矩形填充图形子函数(不画边界线)

void CMyVC2View::FillRect0(CDC *pDC,COLORREF col,CPoint point,int chd,int kd)
{
	CBrush newBrush(col);
	CBrush *poldBrush;
	poldBrush=pDC->SelectObject(&newBrush);
	pDC->FillRect(CRect(point.x,point.y,point.x+chd,point.y+kd),&newBrush);
	pDC->SelectObject(poldBrush);
	newBrush.DeleteObject();
}


// 画矩形填充图形子函数(画边界线)

void CMyVC2View::Rectangle0(CDC *pDC,int x1,int y1,int x2,int y2,COLORREF col)
{
	CBrush eiBrush;
	CBrush *poldBrush;
	CPen *poldPen;
	poldPen=(CPen*)pDC->SelectStockObject(NULL_PEN);
	eiBrush.CreateSolidBrush(col);
	poldBrush=pDC->SelectObject(&eiBrush);
	pDC->Rectangle(x1,y1,x2,y2);
	pDC->SelectObject(poldPen);
	pDC->SelectObject(poldBrush);
	eiBrush.DeleteObject();
}

// 画直线子函数

void CMyVC2View::Line0(CDC *pDC,int x1,int y1,int x2,int y2,int siwid,COLORREF sicol)
{
	CPen siPen;
	CPen *poldPen;
	siPen,CreatePen(PS_SOLID,siwid,sicol);
	poldPen=pDC->SelectObject(&siPen);
	pDC->MoveTo(x1,y1);
    pDC->LineTo(x2,y2);
	pDC->SelectObject(poldPen);
	siPen.DeleteObject();
}

// 画椭圆线或椭圆面子函数

//void CMyVC2View::Ellipses(CDC *pCD,int x1,int y1,int x2,int y2,int w,COLORREF col,BOOL mb)
//{
//	CPen eiPen;
//	CPen *poldPen;
//	CBrush *poldBrush; 
//	poldBrush=(CBrush*)pDC->SelectStockObject(mb);
//	eiPen.CreatePen(PS_SOLID,w,col);
//	poldPen=pDC->SelectObject(&eiPen);
//	pDC->Ellipse(x1,y1,x2,y2);
//	pDC->SelectObject(pOldPen);
//	pDC->SelectObject(poldBrush);
//	eiPen.DeleteObject();
//}

// 画圆线子函数

void CMyVC2View::Arc0(CDC *pDC,int xo,int yo,int Rre,int ew,COLORREF ecol)
{
	CPen eiPen;
	CPen *poldPen;
	eiPen.CreatePen(PS_SOLID,ew,ecol);
	poldPen=pDC->SelectObject(&eiPen);
	pDC->Arc(xo-Rre,yo+Rre,xo+Rre,yo-Rre,0,0,0,0);
	pDC->SelectObject(poldPen);
	eiPen.DeleteObject();
}

// 画圆填充图形子函数

void CMyVC2View::Ellipsem(CDC *pDC,int xo,int yo,int Rre,COLORREF eicol)
{
	CBrush eiBrush;
	CBrush *poldBrush;
	CPen *poldPen;
	poldPen=(CPen*)pDC->SelectStockObject(NULL_PEN);
	eiBrush.CreateSolidBrush(eicol);
	poldBrush=pDC->SelectObject(&eiBrush);
	pDC->Ellipse(xo-Rre,yo-Rre,xo+Rre,yo+Rre);
	pDC->SelectObject(poldPen);
	pDC->SelectObject(poldBrush);
	eiBrush.DeleteObject();
}
  
// 画圆弧线段图形子函数

void CMyVC2View::Arcl(CDC *pDC,int xo,int yo,int re,double Ro,double Rd,int w,COLORREF col)
{
	CPen eiPen;
	CPen *poldPen;
	double pxo,pyo,pxd,pyd,PI;
	PI=3.1415;
	pxo=re*cos(Ro*PI/180.0)+xo;pyo=re*sin(Ro*PI/180.0)+yo;
	pxd=re*cos(Rd*PI/180.0)+xo;pyd=re*sin(Rd*PI/180.0)+yo;
	eiPen.CreatePen(PS_SOLID,w,col);
	poldPen=pDC->SelectObject(&eiPen);
	//把设备环境的笔调换成新生成的笔,同时返回指向原设备环境的笔的指针
	pDC->Arc((xo-re),(yo+re),(xo+re),(yo-re),int(pxo),int(pyo)int(pxd),int(pyd));
	pDc->SelectObject(poldPen);
	eiPen.DeleteObject();
}

//画五边形填充图形子函数

void CMyVC2View::Polygon0(CDC *pDC,int xo,int yo,COLORREF col)
{
	CPont pt[6];
	double Angle,PI;
	CBrush goBrush;
	CBrush*poldBrush;
	CPen*poIdpen;
	goBrush.CreateHatchBrush(HS_CROSS,col);
	poIdBrush=pDC->selectObject(&goBrush);
	//把设备环境的刷子调换新生成的刷子,同时返回指向原设备环境的刷子的指针
	poIdPen=(CPen*)pDC-SelectStockObject(BLACK-PEN);
	//在设备环境中分配一只黑色库笔,同时返回指向原设备环境的笔的指针
	//该黑色笔用于画多边形的边界线,如果选透明库笔则不画边线
	pDC->SetBkMode(TRANSPARENT);
	PI=3.1415;
	Angle=2.0*PI/5;
	for(int i=0; i++){
	    pt[i].x=xo+int(sin(double(i)*Angle)*300;
		pt[i].y=yo+int(cos(double(i)*Angle)*300;
	}
	PDC->Polygon(pt,5);
	pDC->SelectObject(poldBrush);
	goBrush.DeleteObject();
	pDC->SelectObject(poldPen);
}

//画五角星填充图形子函数

void CMyVC2View::Polygonl(CDC *pDC,int xo,int yo,COLORREF col)
{
	//参数意义:(xo,yo)---中心点坐标,coI---顔色
	CPoint pt[6];
	CBrush goBrush;
	CBrush*pOIdBrush;
	CPen*pOIdPen;
	goBrush.CreatSolidBrush(coI);
	pOIdBrush=pDC->SelectObject(&goBrush);
	//把设备环境的刷子调换成新的刷子,同时反回指向原设备环境的刷子的指针
	pOIdBrush=(cpen*)pDC->SelectStockObject(NULL_PEN);

	//在设备环境中分配一只透明库笔,同时返回指向原设备环境的笔的指针
	//该透明笔用于画多边形的边线,缺省状态下系统将黑笔画多边线
	double Angle=(720.0/57/.295)5
		for(int i=0; i<5;i++){
			pt[i].xo+int(sin(double(i)*Angle)*300.0;
			pt[t].y=yo+int(cos(double(i)*Angle)*300.0;
		}
		pDC->SetPolyFllMode(WINDING);
		 pDC->Ploygon(pt,5);
		pDC->SelectObject(poldBrush);
		goBrush.DeleteObject();
		pDC->SelectObject(poldPen);
}










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -