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

📄 2dgraphview.cpp

📁 098u09ur3人味儿味儿 惹我而为人沃尔沃而人为
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 2DGRAPHView.cpp : implementation of the CMy2DGRAPHView class
//

#include "stdafx.h"
#include "2DGRAPH.h"
#include "math.h"
#include "LineWidthDlg.h"
#include "LineStyleDlg.h"

#include "2DGRAPHDoc.h"
#include "2DGRAPHView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMy2DGRAPHView

IMPLEMENT_DYNCREATE(CMy2DGRAPHView, CView)

BEGIN_MESSAGE_MAP(CMy2DGRAPHView, CView)
	//{{AFX_MSG_MAP(CMy2DGRAPHView)
	ON_COMMAND(ID_GRAPH_POINT, OnGraphPoint)
	ON_COMMAND(ID_GRAPH_ELLIPSE, OnGraphEllipse)
	ON_COMMAND(ID_GRAPH_LINE, OnGraphLine)
	ON_COMMAND(ID_GRAPH_RECT, OnGraphRect)
	ON_COMMAND(ID_GRAPH_POLYGON, OnGraphPolygon)
	ON_COMMAND(ID_GRAPH_TRIGON, OnGraphTrigon)
	ON_COMMAND(ID_GRAPH_POLYLINE, OnGraphPolyline)
	ON_UPDATE_COMMAND_UI(ID_GRAPH_ELLIPSE, OnUpdateGraphEllipse)
	ON_UPDATE_COMMAND_UI(ID_GRAPH_LINE, OnUpdateGraphLine)
	ON_UPDATE_COMMAND_UI(ID_GRAPH_POINT, OnUpdateGraphPoint)
	ON_UPDATE_COMMAND_UI(ID_GRAPH_POLYGON, OnUpdateGraphPolygon)
	ON_UPDATE_COMMAND_UI(ID_GRAPH_POLYLINE, OnUpdateGraphPolyline)
	ON_UPDATE_COMMAND_UI(ID_GRAPH_RECT, OnUpdateGraphRect)
	ON_UPDATE_COMMAND_UI(ID_GRAPH_TRIGON, OnUpdateGraphTrigon)
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_COMMAND(ID_GRAPH_CIRCLE, OnGraphCircle)
	ON_UPDATE_COMMAND_UI(ID_GRAPH_CIRCLE, OnUpdateGraphCircle)
	ON_WM_LBUTTONDBLCLK()
	ON_COMMAND(ID_SET_LINEWIDTH, OnSetLinewidth)
	ON_COMMAND(ID_SET_COLOR, OnSetLineColor)
	ON_COMMAND(ID_ERASER, OnEraser)
	ON_WM_LBUTTONUP()
	ON_COMMAND(ID_SET_BRUSH, OnSetBrushColor)
	ON_UPDATE_COMMAND_UI(ID_ERASER, OnUpdateEraser)
	ON_COMMAND(ID_SET_LINESTYLE, OnSetLinestyle)
	ON_WM_SETCURSOR()
	ON_COMMAND(ID_CLEANSCREEN, OnCleanscreen)
	ON_COMMAND(ID_SET_BRUSHNULL, OnSetBrushNull)
	ON_UPDATE_COMMAND_UI(ID_SET_BRUSHNULL, OnUpdateSetBrushnull)
	ON_COMMAND(ID_SET_BACKCOLOR, OnSetBackcolor)
	ON_COMMAND(ID_FILLCOLOR, OnFillcolor)
	ON_UPDATE_COMMAND_UI(ID_FILLCOLOR, OnUpdateFillcolor)
	ON_UPDATE_COMMAND_UI(ID_SET_BACKCOLOR, OnUpdateSetBackcolor)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CMy2DGRAPHView construction/destruction

CMy2DGRAPHView::CMy2DGRAPHView()
{
	// TODO: add construction code here
	
	m_LogPen.lopnColor = RGB(255,0,0);
	m_LogPen.lopnStyle = PS_SOLID;
	m_LogPen.lopnWidth.x = 0;
	m_LogBrush.lbStyle = BS_NULL;
	BackColor=RGB(255,255,255);
	m_bBNull = TRUE;

	m_bPolygon = FALSE;		
	m_bEllipse = FALSE;
	m_bPolyline = FALSE;
	m_bLine = FALSE;
	m_bPoint = FALSE;
	m_bRect = FALSE;
	m_bTrigon = FALSE;
	m_bCircle = FALSE;
	m_bEraser = FALSE;
	m_bFillcolor = FALSE;
	m_bBackColor = FALSE;

	m_nStep = 0;
	m_nStartX = m_nStartY = 0;
	m_nStartX2 = m_nStartY2 = 0;
	m_nOStartX = m_nOStartY = 0;	
	m_nEndX = m_nEndY = 0;
	m_radius = 0;

	int i=0;
	for(i=1;i<=100;i++)
	{
		m_Polygon[i].x=0;
		m_Polygon[i].y=0;
	}
	POINT m_Trigon[3]={{0,0},{0,0},{0,0}};
}

CMy2DGRAPHView::~CMy2DGRAPHView()
{
}

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

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMy2DGRAPHView drawing

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

	BackColor = pDoc->m_BackColor;//首先确定背景颜色
	CPen NewPen(PS_SOLID,1,BackColor);
	CPen *pOldPen=pDC->SelectObject(&NewPen);
	CBrush NewBrush(BackColor);
	CBrush * pOldBrush = pDC->SelectObject(&NewBrush);
	RECT Rect;
	GetClientRect(&Rect);
	pDC->Rectangle(&Rect);

	for(int i=0;i<pDoc->m_nPointNum;i++)
	{
		int x = pDoc->m_Point[i][0];
		int y = pDoc->m_Point[i][1];
		CPen NewPen;
		NewPen.CreatePenIndirect(&m_LogPen);
		CPen *pOldPen=pDC->SelectObject(&NewPen);
		pDC->Ellipse(x-2,y-2,x+2,y+2);
	}

	for(i=0;i<pDoc->m_nEllipseNum;i++)
	{
		int x1 = pDoc->m_Ellipse[i][0];
		int y1 = pDoc->m_Ellipse[i][1];
		int x2 = pDoc->m_Ellipse[i][2];
		int y2 = pDoc->m_Ellipse[i][3];
		m_LogPen.lopnStyle = pDoc->m_Ellipse[i][4];
		m_LogPen.lopnWidth.x = pDoc->m_Ellipse[i][5];
		m_LogPen.lopnColor = pDoc->m_Ellipse[i][6];
		m_LogBrush = pDoc->m_ELogBrush[i];

		CPen NewPen;
		NewPen.CreatePenIndirect(&m_LogPen);
		CPen *pOldPen=pDC->SelectObject(&NewPen);
		CBrush NewBrush;
		NewBrush.CreateBrushIndirect(&m_LogBrush);
		CBrush * pOldBrush = pDC->SelectObject(&NewBrush);
		pDC->Ellipse(x1,y1,x2,y2);
	}

	for(i=0;i<pDoc->m_nCircleNum;i++)
	{
		int x1 = pDoc->m_Circle[i][0];
		int y1 = pDoc->m_Circle[i][1];
		int x2 = pDoc->m_Circle[i][2];
		int y2 = pDoc->m_Circle[i][3];
		m_LogPen = pDoc->m_CLogPen[i];
		m_LogBrush = pDoc->m_CLogBrush[i];

		CPen NewPen;
		NewPen.CreatePenIndirect(&m_LogPen);
		CPen *pOldPen=pDC->SelectObject(&NewPen);
		CBrush NewBrush;
		NewBrush.CreateBrushIndirect(&m_LogBrush);
		CBrush * pOldBrush = pDC->SelectObject(&NewBrush);
		pDC->Ellipse(x1,y1,x2,y2);
	}

	for(i=0;i<pDoc->m_nTrigonNum;i++)
	{
		int x1 = pDoc->m_Trigon[i][0];
		int y1 = pDoc->m_Trigon[i][1];
		int x2 = pDoc->m_Trigon[i][2];
		int y2 = pDoc->m_Trigon[i][3];
		int x3 = pDoc->m_Trigon[i][4];
		int y3 = pDoc->m_Trigon[i][5];
		m_LogPen = pDoc->m_TLogPen[i];
		m_LogBrush = pDoc->m_TLogBrush[i];

		CPen NewPen;
		NewPen.CreatePenIndirect(&m_LogPen);
		CPen *pOldPen=pDC->SelectObject(&NewPen);
		CBrush NewBrush;
		NewBrush.CreateBrushIndirect(&m_LogBrush);
		CBrush * pOldBrush = pDC->SelectObject(&NewBrush);
		POINT m_Trigon[3]={{x1,y1},{x2,y2},{x3,y3}};
		pDC->Polygon(m_Trigon,3);;
	}

	for(i=0;i<pDoc->m_nPolygonNum;i++)
	{
		m_LogPen = pDoc->m_PLogPen[i];
		m_LogBrush = pDoc->m_PLogBrush[i];

		CPen NewPen;
		NewPen.CreatePenIndirect(&m_LogPen);
		CPen *pOldPen=pDC->SelectObject(&NewPen);
		CBrush NewBrush;
		NewBrush.CreateBrushIndirect(&m_LogBrush);
		CBrush * pOldBrush = pDC->SelectObject(&NewBrush);
		pDC->Polygon(pDoc->m_Polygon[i],pDoc->m_nSideNum[i]);
	}

	for(i=0;i<pDoc->m_nLineNum;i++)
	{
		int x1 = pDoc->m_Line[i][0];
		int y1 = pDoc->m_Line[i][1];
		int x2 = pDoc->m_Line[i][2];
		int y2 = pDoc->m_Line[i][3];
		m_LogPen.lopnStyle = pDoc->m_Line[i][4];
		m_LogPen.lopnWidth.x = pDoc->m_Line[i][5];
		m_LogPen.lopnColor = pDoc->m_Line[i][6];

		CPen NewPen;
		NewPen.CreatePenIndirect(&m_LogPen);
		CPen *pOldPen=pDC->SelectObject(&NewPen);
		pDC->MoveTo(x1,y1);
		pDC->LineTo(x2,y2);
	}

	for(i=0;i<pDoc->m_nRectNum;i++)
	{
		int x1 = pDoc->m_Rect[i][0];
		int y1 = pDoc->m_Rect[i][1];
		int x2 = pDoc->m_Rect[i][2];
		int y2 = pDoc->m_Rect[i][3];
		m_LogPen = pDoc->m_RLogPen[i];
		m_LogBrush = pDoc->m_RLogBrush[i];

		CPen NewPen;
		NewPen.CreatePenIndirect(&m_LogPen);
		CPen *pOldPen=pDC->SelectObject(&NewPen);
		CBrush NewBrush;
		NewBrush.CreateBrushIndirect(&m_LogBrush);
		CBrush * pOldBrush = pDC->SelectObject(&NewBrush);
		pDC->Rectangle(x1,y1,x2,y2);
	}

	for(i=0;i<pDoc->m_nFillNum;i++)//不知道错在哪里???
	{
		POINT point;
		point.x = pDoc->m_Fill[i][0];
		point.y = pDoc->m_Fill[i][1];
		int x3 = pDoc->m_Fill[i][2];
		m_LogBrush.lbColor = x3;
		m_LogBrush.lbStyle = BS_SOLID;
		m_bBNull = FALSE;
		CBrush NewBrush;
		NewBrush.CreateBrushIndirect(&m_LogBrush);
		CBrush * pOldBrush = pDC->SelectObject(&NewBrush);
		pDC->ExtFloodFill(point.x,point.y,pDC->GetPixel(point),FLOODFILLSURFACE);
	}

	for(i=0;i<pDoc->m_nEraserNum;i++)
	{
		int x1 = pDoc->m_Eraser[i][0];
		int y1 = pDoc->m_Eraser[i][1];
		int x2 = pDoc->m_Eraser[i][2];
		int y2 = pDoc->m_Eraser[i][3];
	
		CPen NewPen(PS_SOLID,1,BackColor);
		CPen *pOldPen=pDC->SelectObject(&NewPen);
		CBrush NewBrush(BackColor);
		CBrush * pOldBrush = pDC->SelectObject(&NewBrush);

		pDC->Rectangle(x1,y1,x2,y2);
	}

	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);
}

/////////////////////////////////////////////////////////////////////////////
// CMy2DGRAPHView printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CMy2DGRAPHView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CMy2DGRAPHView message handlers

void CMy2DGRAPHView::OnGraphPoint() 
{
	// TODO: Add your command handler code here
	m_bPoint = TRUE;//允许画点	

	m_bLine = FALSE;
	m_bCircle = FALSE;
	m_bFillcolor = FALSE;
	m_bPolyline = FALSE;
	m_bPolygon = FALSE;
	m_bEllipse = FALSE;
	m_bRect = FALSE;
	m_bBackColor = FALSE;
	m_bEraser = FALSE;
	m_bTrigon = FALSE;//禁止其他操作
}

void CMy2DGRAPHView::OnGraphEllipse() 
{
	// TODO: Add your command handler code here
	m_bEllipse = TRUE;//允许画椭圆	
	
	m_bLine = FALSE;
	m_bFillcolor = FALSE;
	m_bCircle = FALSE;
	m_bPolyline = FALSE;
	m_bPolygon = FALSE;
	m_bBackColor = FALSE;
	m_bPoint = FALSE;
	m_bRect = FALSE;
	m_bEraser = FALSE;
	m_bTrigon = FALSE;//禁止其他操作	
}

void CMy2DGRAPHView::OnGraphLine() 
{
	// TODO: Add your command handler code here
	m_bLine = TRUE;//允许画线段	
	
	m_bEllipse = FALSE;
	m_bEraser = FALSE;
	m_bFillcolor = FALSE;
	m_bCircle = FALSE;
	m_bPolyline = FALSE;
	m_bPolygon = FALSE;
	m_bPoint = FALSE;
	m_bBackColor = FALSE;
	m_bRect = FALSE;
	m_bTrigon = FALSE;
	m_bEraser = FALSE;//禁止其他操作	
}

void CMy2DGRAPHView::OnGraphRect() 
{
	// TODO: Add your command handler code here
	m_bRect = TRUE;//允许画矩形	
	
	m_bEllipse = FALSE;
	m_bCircle = FALSE;
	m_bPolyline = FALSE;
	m_bPolygon = FALSE;
	m_bFillcolor = FALSE;
	m_bPoint = FALSE;
	m_bBackColor = FALSE;
	m_bLine = FALSE;
	m_bEraser = FALSE;
	m_bTrigon = FALSE;//禁止其他操作	
}

void CMy2DGRAPHView::OnGraphPolygon() 
{
	// TODO: Add your command handler code here
	m_bPolygon = TRUE;//允许画任意多边形	
	
	m_bEllipse = FALSE;
	m_bCircle = FALSE;
	m_bFillcolor = FALSE;
	m_bPolyline = FALSE;
	m_bLine = FALSE;
	m_bPoint = FALSE;
	m_bBackColor = FALSE;
	m_bRect = FALSE;
	m_bEraser = FALSE;
	m_bTrigon = FALSE;//禁止其他操作	
}

void CMy2DGRAPHView::OnGraphTrigon() 
{
	// TODO: Add your command handler code here

⌨️ 快捷键说明

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