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

📄 staticgraph.cpp

📁 可用于同时辨识模型阶次和参数
💻 CPP
字号:
// StaticGraph.cpp : implementation file
//

#include "stdafx.h"
#include "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=5;
		rect.left=5;
		dc.DrawText(m_csPrint,&rect,DT_LEFT);
	}
	else if( m_nFlag == 1||m_nFlag==2)
	{
/*		CPen redPen;
		redPen.CreatePen(PS_SOLID,1,RGB(255,0,0));
		CPen greenPen;
		greenPen.CreatePen(PS_SOLID,1,RGB(0,128,0));
		CPen bluePen;
		bluePen.CreatePen(PS_SOLID,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 -105;
		CString cc;
		dc.DrawText("随模型阶次递增的AIC值变化曲线",&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);
		}
		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;
			int j=0;
			CPen redPen;
			redPen.CreatePen(PS_SOLID,5,RGB(255,0,0));
			pOldPen = dc.SelectObject(&redPen);	
			for(i = 0 ; i < m_nSize ; i ++)
			{
				
				if(nLength> rec.right-20) break;
				dc.MoveTo(nLength+nStep,rec.bottom/2 - m_npData[i*m_nColumnNum+j]/20000);
				dc.LineTo(nLength+nStep,rec.bottom/2 - m_npData[i*m_nColumnNum+j]/20000);
				nLength += nStep;
			}
			CPen blackPen;
			blackPen.CreatePen(PS_DOT,1,RGB(0, 0, 0));
			pOldPen = dc.SelectObject(&blackPen);	
			nLength=20;
			dc.MoveTo(nLength+nStep,rec.bottom/2 - m_npData[0]/20000);
			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]/20000);
				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 + -