www.pudn.com > DrawGrInDlg.rar > GrCtrl.cpp


// GrCtrl.cpp : implementation file 
// 
#include "stdafx.h" 
#include "resource.h" 
#include "GrCtrl.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CGrCtrl 
 
CGrCtrl::CGrCtrl() 
{ 
	m_iType = 0; 
	m_line = NULL; 
	m_bar = NULL; 
	m_pie = NULL; 
} 
 
CGrCtrl::~CGrCtrl() 
{ 
	ReleaseObject(); 
} 
 
 
BEGIN_MESSAGE_MAP(CGrCtrl, CStatic) 
	//{{AFX_MSG_MAP(CGrCtrl) 
	ON_WM_PAINT() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CGrCtrl message handlers 
 
void CGrCtrl::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	 
	// TODO: Add your message handler code here 
//	dc.SetBkColor(RGB(0,0,0)); 
	CRect rect; 
	GetClientRect(&rect); 
	dc.FillSolidRect(&rect,RGB(255,255,255)); 
//	CDC *pDC = GetDC(); 
	switch(m_iType) 
	{ 
	case 0: 
		break; 
	case 1: 
		m_pie->DrawPie(&dc,0,0,rect.Width(),rect.Height()); 
		break; 
	case 2: 
		m_bar->DrawBar(&dc,0,0,rect.Width(),rect.Height()); 
		break; 
	case 3: 
		m_line->DrawCurveLine(&dc,0,0,rect.Width(),rect.Height()); 
		break; 
	default: 
		break; 
	} 
//	InvalidateRect(&rect); 
	// Do not call CStatic::OnPaint() for painting messages 
} 
 
void CGrCtrl::CreateObject(int iType) 
{ 
	ReleaseObject(); 
	 
	switch(iType) 
	{ 
	case 0: 
		m_iType = 0; 
		break; 
	case 1: 
		m_iType = 1; 
		m_pie = new CPie(); 
		break; 
	case 2: 
		m_iType = 2; 
		m_bar = new CBar(); 
		break; 
	case 3: 
		m_iType = 3; 
		m_line = new CLine(); 
		break; 
	default: 
		m_iType = 0; 
		break; 
	} 
} 
 
void CGrCtrl::ReleaseObject() 
{ 
	if( m_pie != NULL ) 
	{ 
		delete m_pie; 
		m_pie = NULL; 
	} 
	if( m_bar != NULL ) 
	{ 
		delete m_bar; 
		m_bar = NULL; 
	} 
	if( m_line != NULL ) 
	{ 
		delete m_line; 
		DeleteAllLines(); 
		m_line = NULL; 
	} 
	 
	m_iType = 0; 
} 
 
void CGrCtrl::SetLegend(CString Name,double Value,COLORREF FillColor,CBaseGr::PointType GraphMode,int LineSize,COLORREF LineColor) 
{ 
	switch(m_iType) 
	{ 
	case 0: 
		break; 
	case 1: 
		m_pie->SetLegend(Name,Value,FillColor,GraphMode,LineSize,LineColor); 
		break; 
	case 2: 
		m_bar->SetLegend(Name,Value,FillColor,GraphMode,LineSize,LineColor); 
		break; 
	case 3: 
		break; 
	default: 
		break; 
	} 
} 
 
void CGrCtrl::SetYMin(int iYMin) 
{ 
	switch(m_iType) 
	{ 
	case 0: 
		break; 
	case 1: 
		m_pie->SetYMin(iYMin); 
		break; 
	case 2: 
		m_bar->SetYMin(iYMin); 
		break; 
	case 3: 
		break; 
	default: 
		break; 
	} 
} 
 
void CGrCtrl::SetYMax(int iYMax) 
{ 
	switch(m_iType) 
	{ 
	case 0: 
		break; 
	case 1: 
		m_pie->SetYMax(iYMax); 
		break; 
	case 2: 
		m_bar->SetYMax(iYMax); 
		break; 
	case 3: 
		break; 
	default: 
		break; 
	}	 
} 
 
BOOL CGrCtrl::IsFree() 
{ 
	if( m_pie != NULL || 
		m_bar != NULL || 
		m_line != NULL) 
	{ 
		return FALSE; 
	} 
 
	return TRUE; 
} 
 
void CGrCtrl::SetTitle(CString szTitle) 
{ 
	switch(m_iType) 
	{ 
	case 0: 
		break; 
	case 1: 
		m_pie->SetTitle(szTitle); 
		break; 
	case 2: 
		m_bar->SetTitle(szTitle); 
		break; 
	case 3: 
		m_line->SetTitle(szTitle); 
		break; 
	default: 
		m_iType = 0; 
		break; 
	}	 
} 
 
void CGrCtrl::SetPieWithText(BOOL bWithText) 
{ 
	m_pie->SetWithText(bWithText); 
} 
 
void CGrCtrl::SetCutPie(BOOL bCutPie) 
{ 
	m_pie->SetCutPie(bCutPie); 
} 
 
void CGrCtrl::SetXName(CString szXName) 
{ 
	switch(m_iType) 
	{ 
	case 0: 
		break; 
	case 1: 
		break; 
	case 2: 
		m_bar->SetXName(szXName); 
		break; 
	case 3: 
		m_line->SetXName(szXName); 
		break; 
	default: 
		break; 
	} 
} 
 
void CGrCtrl::SetYName(CString szYName) 
{ 
	 
	switch(m_iType) 
	{ 
	case 0: 
		break; 
	case 1: 
		break; 
	case 2: 
		m_bar->SetYName(szYName); 
		break; 
	case 3: 
		m_line->SetYName(szYName); 
		break; 
	default: 
		break; 
	} 
} 
 
void CGrCtrl::Set3DBar(BOOL b3DBar) 
{ 
	m_bar->Set3DBar(b3DBar); 
} 
 
void CGrCtrl::SetWithDash(BOOL bWithDash) 
{ 
	switch(m_iType) 
	{ 
	case 0: 
		break; 
	case 1: 
		break; 
	case 2: 
		m_bar->SetWithDash(bWithDash); 
		break; 
	case 3: 
		m_line->SetWithDash(bWithDash); 
		break; 
	default: 
		break; 
	} 
} 
 
int CGrCtrl::AddLine() 
{ 
	CLineData *pLineData = new CLineData(); 
	m_pLineDataList.AddTail(pLineData); 
	m_line->AddLineData(pLineData); 
 
	return (m_pLineDataList.GetCount()-1); 
} 
 
void CGrCtrl::DeleteLine(int iIndex) 
{ 
	if( iIndex >= m_pLineDataList.GetCount() || 
		iIndex < 0) 
		return; 
 
	CLineData *pLineData = NULL; 
	POSITION pos = m_pLineDataList.FindIndex(iIndex); 
	if( pos != NULL ) 
	{ 
		pLineData = (CLineData*)(m_pLineDataList.GetAt(pos)); 
		delete pLineData; 
		pLineData = NULL; 
		m_pLineDataList.RemoveAt(pos); 
	} 
} 
 
void CGrCtrl::DeleteAllLines() 
{ 
	for(int i=0;iAddData(x,y); 
	} 
} 
 
void CGrCtrl::SetLegend(int iIndex, CString szLegend) 
{ 
	CLineData *pLineData = NULL; 
	POSITION pos = m_pLineDataList.FindIndex(iIndex); 
	if( pos != NULL ) 
	{ 
		pLineData = (CLineData*)(m_pLineDataList.GetAt(pos)); 
		pLineData->SetLegend(szLegend); 
	} 
} 
 
void CGrCtrl::SetPointType(int iIndex,CBaseGr::PointType Pt) 
{ 
	CLineData *pLineData = NULL; 
	POSITION pos = m_pLineDataList.FindIndex(iIndex); 
	if( pos != NULL ) 
	{ 
		pLineData = (CLineData*)(m_pLineDataList.GetAt(pos)); 
		pLineData->SetPointType(Pt); 
	} 
} 
 
void CGrCtrl::SetLineSize(int iIndex,int Ls) 
{ 
	CLineData *pLineData = NULL; 
	POSITION pos = m_pLineDataList.FindIndex(iIndex); 
	if( pos != NULL ) 
	{ 
		pLineData = (CLineData*)(m_pLineDataList.GetAt(pos)); 
		pLineData->SetLineSize(Ls); 
	} 
} 
 
void CGrCtrl::SetLineColor(int iIndex,COLORREF Lc) 
{ 
	CLineData *pLineData = NULL; 
	POSITION pos = m_pLineDataList.FindIndex(iIndex); 
	if( pos != NULL ) 
	{ 
		pLineData = (CLineData*)(m_pLineDataList.GetAt(pos)); 
		pLineData->SetLineColor(Lc); 
	} 
} 
 
void CGrCtrl::SetPointColor(int iIndex, COLORREF Pc) 
{ 
	CLineData *pLineData = NULL; 
	POSITION pos = m_pLineDataList.FindIndex(iIndex); 
	if( pos != NULL ) 
	{ 
		pLineData = (CLineData*)(m_pLineDataList.GetAt(pos)); 
		pLineData->SetPointColor(Pc); 
	} 
} 
 
void CGrCtrl::SetWithDot(BOOL bWithDot) 
{ 
	m_line->SetWithDot(bWithDot); 
} 
 
void CGrCtrl::SetDotSize(int iDs) 
{ 
	m_line->SetDotSize(iDs); 
} 
 
void CGrCtrl::SetXMin(int iXMin) 
{ 
	m_line->SetXMin(iXMin); 
} 
 
void CGrCtrl::SetXMax(int iXMax) 
{ 
	m_line->SetXMax(iXMax); 
}