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

📄 chartlineserie.cpp

📁 BCB CHART控件 在Wince5.0下的移植
💻 CPP
字号:
/*
 *
 *	ChartLineSerie.cpp
 *
 *	Written by C閐ric Moonen (cedric_moonen@hotmail.com)
 *
 *
 *
 *	This code may be used for any non-commercial and commercial purposes in a compiled form.
 *	The code may be redistributed as long as it remains unmodified and providing that the 
 *	author name and this disclaimer remain intact. The sources can be modified WITH the author 
 *	consent only.
 *	
 *	This code is provided without any garanties. I cannot be held responsible for the damage or
 *	the loss of time it causes. Use it at your own risks
 *
 *	An e-mail to notify me that you are using this code is appreciated also.
 *
 *
 */

#include "stdafx.h"
#include "ChartLineSerie.h"
#include "ChartCtrl.h"

#include "Math.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CChartLineSerie::CChartLineSerie(CChartCtrl* pParent) : CChartSerie(pParent,stLineSerie)
{
	m_iLineWidth = 1;
	m_iPenStyle = PS_SOLID;
}

CChartLineSerie::~CChartLineSerie()
{

}


void CChartLineSerie::DrawAll(CDC *pDC)
{
	if (!m_bIsVisible)
		return;

	CPen NewPen(m_iPenStyle,m_iLineWidth,m_ObjectColor);
	CPen* pOldPen;

	if (pDC->GetSafeHdc())
	{
		pDC->SetBkMode(TRANSPARENT);
		//To have lines limited in the drawing rectangle :
		pDC->IntersectClipRect(m_ObjectRect);
		pOldPen = pDC->SelectObject(&NewPen);

		for (int i=0;i<(int)m_vPoints.size()-1;i++)
		{
			//We don't draw a line between the origin and the first point -> we must have
			// a least 2 points before begining drawing
			
			CPoint ScreenPoint;
			ValueToScreen(m_vPoints[i].X,m_vPoints[i].Y,ScreenPoint);
			pDC->MoveTo(ScreenPoint.x,ScreenPoint.y);

			ValueToScreen(m_vPoints[i+1].X,m_vPoints[i+1].Y,ScreenPoint);
			pDC->LineTo(ScreenPoint.x,ScreenPoint.y);
		}

		pDC->SelectClipRgn(NULL);
		pDC->SelectObject(pOldPen);
	}
}

void CChartLineSerie::Draw(CDC* pDC)
{
	if (!m_bIsVisible)
		return;

	CPen NewPen(m_iPenStyle,m_iLineWidth,m_ObjectColor);
	CPen* pOldPen;

	if (pDC->GetSafeHdc())
	{
		pDC->SetBkMode(TRANSPARENT);
		//To have lines limited in the drawing rectangle :
		pDC->IntersectClipRect(m_ObjectRect);
		pOldPen = pDC->SelectObject(&NewPen);

		//Draw all points that haven't been drawn yet
		for (m_iLastDrawnPoint;m_iLastDrawnPoint<(int)m_vPoints.size()-1;m_iLastDrawnPoint++)
		{
			//We don't draw a line between the origin and the first point -> we must have
			// a least 2 points before begining drawing
		//	if (m_vPoints<1)
		//		break;

			CPoint ScreenPoint;
			ValueToScreen(m_vPoints[m_iLastDrawnPoint].X,m_vPoints[m_iLastDrawnPoint].Y,ScreenPoint);
			pDC->MoveTo(ScreenPoint.x,ScreenPoint.y);

			ValueToScreen(m_vPoints[m_iLastDrawnPoint+1].X,m_vPoints[m_iLastDrawnPoint+1].Y,ScreenPoint);
			pDC->LineTo(ScreenPoint.x,ScreenPoint.y);
		}

		pDC->SelectClipRgn(NULL);
		pDC->SelectObject(pOldPen);
	}
}

CSize CChartLineSerie::GetLegendSize() const
{
	CSize LegendSize;
	LegendSize.cx = 9;
	LegendSize.cy = m_iLineWidth;

	return LegendSize;
}

int CChartLineSerie::DrawLegend(CDC *pDC, CPoint UpperLeft, int BitmapWidth) const
{
	if (m_strSerieName== _T(""))
		return 0;

	//Draw Text
	int TextHeigh = pDC->GetTextExtent(m_strSerieName.c_str()).cy;
	pDC->ExtTextOut(UpperLeft.x+BitmapWidth+6,UpperLeft.y,ETO_CLIPPED,NULL,m_strSerieName.c_str(),NULL);

	//Draw line:
	CPen NewPen(m_iPenStyle,m_iLineWidth,m_ObjectColor);
	CPen* pOldPen = pDC->SelectObject(&NewPen);
	pDC->MoveTo(UpperLeft.x+3,UpperLeft.y+TextHeigh/2);
	pDC->LineTo(UpperLeft.x+BitmapWidth,UpperLeft.y+TextHeigh/2);
	pDC->SelectObject(pOldPen);

	return TextHeigh;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -