📄 2dgraphview.cpp
字号:
// 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 + -