📄 bpnlayerexeview.cpp
字号:
// BpNlayerEXEView.cpp : implementation of the CBpNlayerEXEView class
//
#include "stdafx.h"
#include "BpNlayerEXE.h"
#include "BpNlayerEXEDoc.h"
#include "BpNlayerEXEView.h"
#include "NewProject.h"
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBpNlayerEXEView
IMPLEMENT_DYNCREATE(CBpNlayerEXEView, CScrollView)
BEGIN_MESSAGE_MAP(CBpNlayerEXEView, CScrollView)
//{{AFX_MSG_MAP(CBpNlayerEXEView)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBpNlayerEXEView construction/destruction
CBpNlayerEXEView::CBpNlayerEXEView()
{
// TODO: add construction code here
}
CBpNlayerEXEView::~CBpNlayerEXEView()
{
}
BOOL CBpNlayerEXEView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CBpNlayerEXEView drawing
void CBpNlayerEXEView::OnDraw(CDC* pDC)
{
CBpNlayerEXEDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int layernumber;
int maxLayerCapture=0;
CPen pen(PS_SOLID,2,RGB(255,143,89));
CBrush brush(RGB(248,252,167));
pDC->SelectObject(brush);
pDC->SelectObject(pen);
layernumber=pDoc->m_iLayerNum;
for (int i=0;i<layernumber;i++)
{
if (maxLayerCapture<*(pDoc->m_piLayerCapture+i))
{
maxLayerCapture=*(pDoc->m_piLayerCapture+i);
}
}
CPoint point1(0,0);
CPoint point2(0,0);
CPoint point3(0,0);
int iTemp1=70*maxLayerCapture+80;
int iTemp2=0;
int iOrigin=0;
int iEnd=0;
for (int i=0;i<pDoc->m_iLayerNum;i++)
{
point1.x=i*130+50;
point2.x=(i-1)*130+100;
iOrigin=iTemp2;
iTemp2=*(pDoc->m_piLayerCapture+i)*70+80;
for (int j=0;j<*(pDoc->m_piLayerCapture+i);j++)
{
point1.y=(int)((iTemp1-iTemp2)/2)+j*70+50;
DrawNueCell(pDC,point1);
for (int k=0;k<*(pDoc->m_piLayerCapture+i-1);k++)
{
point2.y=((iTemp1-iOrigin)/2)+k*70+75;
point3.x=point1.x;
point3.y=point1.y+25;
DrawArrowLine(pDC,point2,point3);
}
}
if (i==0)
{
for (int j=0;j<*(pDoc->m_piLayerCapture);j++)
{
point3.x=50;
point3.y=(iTemp1-iTemp2)/2+75+j*70;
point2.x=0;
point2.y=point3.y;
DrawArrowLine(pDC,point2,point3);
}
}
if (i==(pDoc->m_iLayerNum-1))
{
for (int j=0;j<*(pDoc->m_piLayerCapture+i);j++)
{
point3.x=pDoc->m_iLayerNum*130+20;
point3.y=(iTemp1-iTemp2)/2+75+j*70;
point2.x=pDoc->m_iLayerNum*130-30;
point2.y=point3.y;
DrawArrowLine(pDC,point2,point3);
}
}
}
SetScrollSizes(MM_TEXT,CSize(pDoc->m_iLayerNum*130+50,iTemp1));
}
/////////////////////////////////////////////////////////////////////////////
// CBpNlayerEXEView diagnostics
#ifdef _DEBUG
void CBpNlayerEXEView::AssertValid() const
{
CScrollView::AssertValid();
}
void CBpNlayerEXEView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CBpNlayerEXEDoc* CBpNlayerEXEView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBpNlayerEXEDoc)));
return (CBpNlayerEXEDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CBpNlayerEXEView message handlers
//DEL void CBpNlayerEXEView::OnWindowSplit()
//DEL {
//DEL // TODO: Add your command handler code here
//DEL
//DEL }
void CBpNlayerEXEView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
SetScrollSizes(MM_TEXT,CSize(100,100));
}
/////////////////////////////////////////////////////////////////
void CBpNlayerEXEView::DrawNueCell(CDC* pDC,CPoint LeftTopPoint)
{
CPoint pointTemp(LeftTopPoint.x+50,LeftTopPoint.y+50);
CRect rect(LeftTopPoint,pointTemp);
pDC->Ellipse(rect);
}
void CBpNlayerEXEView::DrawArrowLine(CDC* pDC,CPoint PointOrigin,CPoint PointEnd)
{
//CPoint pointTemp;
CPoint pointTemp;
pDC->MoveTo(PointOrigin);
pDC->LineTo(PointEnd);
pointTemp.y=int(-sin(atan((double)(PointEnd.y-PointOrigin.y)/(PointEnd.x-PointOrigin.x))+0.53)*10+PointEnd.y);
pointTemp.x=int(-cos(atan((double)(PointEnd.y-PointOrigin.y)/(PointEnd.x-PointOrigin.x))+0.53)*10+PointEnd.x);
pDC->MoveTo(PointEnd);
pDC->LineTo(pointTemp);
pointTemp.y=int(sin(0.53-atan((double)(PointEnd.y-PointOrigin.y)/(PointEnd.x-PointOrigin.x)))*10+PointEnd.y);
pointTemp.x=int(-cos(0.53-atan((double)(PointEnd.y-PointOrigin.y)/(PointEnd.x-PointOrigin.x)))*10+PointEnd.x);
pDC->MoveTo(PointEnd);
pDC->LineTo(pointTemp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -