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

📄 staticgraph.cpp

📁 时间序列分析
💻 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 + -