📄 staticgraph.cpp
字号:
// StaticGraph.cpp : implementation file
//
#include "stdafx.h"
#include "ELS_RO_AIC.h"
#include "StaticGraph.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CStaticGraph
CStaticGraph::CStaticGraph()
{
m_nSize=0;
m_npData=NULL;
}
CStaticGraph::~CStaticGraph()
{
delete m_npData;
}
BEGIN_MESSAGE_MAP(CStaticGraph, CStatic)
//{{AFX_MSG_MAP(CStaticGraph)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStaticGraph message handlers
BOOL CStaticGraph::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CBrush brush(RGB (128 , 0 , 128) );
CBrush* pOldBrush = pDC->SelectObject (&brush);
CRect rcClip ;
this->GetClientRect(&rcClip);//Paint the area.
rcClip.bottom -= 1;
rcClip.right -= 1;
pDC->FillRect(&rcClip,pOldBrush);
pDC->SelectObject (pOldBrush );
return TRUE;
return CStatic::OnEraseBkgnd(pDC);
}
void CStaticGraph::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect rect;
this->GetClientRect(&rect);
if( m_nFlag == 0)
{
rect.top=0;
rect.left=1;
dc.DrawText(m_csPrint,&rect,DT_LEFT);
}
else if( m_nFlag == 1||m_nFlag==2)
{
CPen redPen;
redPen.CreatePen(PS_DASH,1,RGB(255,0,0));
CPen greenPen;
greenPen.CreatePen(PS_DASHDOTDOT,1,RGB(0,128,0));
CPen bluePen;
bluePen.CreatePen(PS_DOT,1,RGB(0,0,255));
CPen yellowPen;
yellowPen.CreatePen(PS_SOLID,1,RGB(128, 128, 0));
CPen blackPen;
blackPen.CreatePen(PS_SOLID,1,RGB(0, 0, 0));
CPen anotherPen;
anotherPen.CreatePen(PS_SOLID,1,RGB(0, 255, 0));
// draw border
dc.MoveTo(0,0);
dc.LineTo(rect.right,0);
dc.LineTo(rect.right,rect.bottom);
dc.LineTo(0,rect.bottom);
dc.LineTo(0,0);
// paint axis
dc.MoveTo(20,rect.bottom / 2);
dc.LineTo(rect.right - 20 , rect.bottom / 2);
dc.LineTo(rect.right - 25, rect.bottom / 2 - 5);
dc.MoveTo(rect.right - 20 , rect.bottom / 2);
dc.LineTo(rect.right - 25, rect.bottom / 2 + 5);
dc.MoveTo(20,rect.bottom - 20);
dc.LineTo(20,20);
dc.LineTo(15,25);
dc.MoveTo(20,20);
dc.LineTo(25,25);
// draw text
CRect rect2;
rect2.bottom = 25;
rect2.right = rect.right /2 +125;
rect2.top = 5;
rect2.left = rect.right /2 -125;
CString cc;
dc.DrawText("随模型阶次递增的输出值辨识曲线",&rect2,DT_VCENTER);
CRect rectAxis=rect;
for(int i = -2 ; i <= 2 ; i ++)
{
dc.MoveTo(18,rect.bottom/2 - 50*i);
dc.LineTo(20,rect.bottom/2 - 50*i);
if(i==0)
{
rectAxis.left = 5;
rectAxis.right = 30;
}
else
{
rectAxis.left = 25;
rectAxis.right = 60;
}
rectAxis.top = rect.bottom/2 - 50*i-5;
rectAxis.bottom = rect.bottom/2 - 50*i+10;
cc.Format(_T("%d"),i*50);
dc.DrawText(cc,&rectAxis,DT_VCENTER);
}
// paint graph
if(m_nSize >0)
{
RECT rec;
this->GetClientRect(&rec);
int nStep = (rec.right-40) / m_nSize;
if(nStep ==0 )
{
nStep =1;
}
int nLength = 20;
int temp;
for(int i = 1 ; i <= 10 ; i ++)
{
temp=i*m_nSize/10*nStep;
dc.MoveTo(nLength+temp,rect.bottom/2);
dc.LineTo(nLength+temp,rect.bottom/2 - 2);
rectAxis.left = nLength+temp-15;
rectAxis.right = nLength+temp+15;
rectAxis.top = rect.bottom/2 + 2 ;
rectAxis.bottom = rect.bottom/2 + 20;
temp=temp/nStep;
cc.Format(_T("%d"),temp);
dc.DrawText(cc,&rectAxis,DT_VCENTER);
}
CPen* pOldPen;
RECT recText2 = rec;
for(int j=0;j<m_nColumnNum;j++)
{
recText2.left = rec.right-75;
recText2.right = rec.right-5;
recText2.top = rec.top+j*20+5;
recText2.bottom = recText2.top+25;
switch(j)
{
case 0:
pOldPen = dc.SelectObject(&redPen);
dc.DrawText("实际输出",&recText2,DT_RIGHT);
dc.MoveTo(rec.right-74,rec.top+j*20+15);
dc.LineTo(rec.right-65,rec.top+j*20+15);
break;
case 1:
pOldPen = dc.SelectObject(&greenPen);
dc.DrawText("CAR输出",&recText2,DT_RIGHT);
dc.MoveTo(rec.right-74,rec.top+j*20+15);
dc.LineTo(rec.right-65,rec.top+j*20+15);
break;
case 2:
pOldPen = dc.SelectObject(&bluePen);
dc.DrawText("CARMA",&recText2,DT_RIGHT);
dc.MoveTo(rec.right-74,rec.top+j*20+15);
dc.LineTo(rec.right-65,rec.top+j*20+15);
break;
}
nLength=20;
dc.MoveTo(nLength+nStep,rec.bottom/2 - m_npData[0]);
for(i = 0 ; i < m_nSize ; i ++)
{
if(nLength> rec.right-20) break;
dc.LineTo(nLength+nStep,rec.bottom/2 - m_npData[i*m_nColumnNum+j]);
nLength += nStep;
}
}
}
}
// Do not call CStatic::OnPaint() for painting messages
}
void CStaticGraph::SetDrawData(int nSize, int *pData, int nColumnNum, int nFlag)
{
m_nSize=nSize;
m_npData=pData;
m_nColumnNum=nColumnNum;
m_nFlag=nFlag;
}
void CStaticGraph::SetDrawText(CString cs)
{
m_nFlag = 0;
m_csPrint = cs;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -