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

📄 line.cpp

📁 WINCE下的画图工具
💻 CPP
字号:
// Line.cpp: implementation of the CLine class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Line.h"

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

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

CLine::CLine()
{
	WithDash=FALSE;
	WithDot = TRUE;
	DotSize = 3;
	xCoorDeta=0;
	xDeta = 5;
	yCoorDeta=0;
	yDeta = 5;
	TitleMode=CBaseGr::TOP;
	LegendMode=CBaseGr::BOTTOM;
}

CLine::~CLine()
{

}
void CLine::AddLineData(CLineData*& pLineData)
{
	LineDataList.AddTail(pLineData);
}
void CLine::DrawCurveLine(CDC* pDC,int LeftTopx,int LeftTopy,int RightBottomx,int RightBottomy)
{
	int nWidth = 30;
	DrawCoordinate(pDC,LeftTopx+40,LeftTopy+37,RightBottomx-4-nWidth,RightBottomy-54,WithDash);
	DrawContent(pDC,LeftTopx+40,LeftTopy+37,RightBottomx-4-nWidth,RightBottomy-54);
	DrawLegend(pDC,RightBottomx-2-nWidth,LeftTopy+37,nWidth,LegendMode);
}
void CLine::DrawLegend(CDC* pDC,int Startx,int Starty,int Width,Align Mode,COLORREF FontColor)
{
	int i=0;
//	int nWidth=0;
//	if(m_Legend.GetSize()>0)
//		nWidth = m_Legend[0].Name.GetLength();
//	for(i=1;i<m_Legend.GetSize();i++)
//	{
//		if(nWidth < m_Legend[i].Name.GetLength())
//			nWidth = m_Legend[i].Name.GetLength();
//	}
	CFont m_font;
//	m_font.CreateFont(
//		  12,                      // nHeight
//		  0,                      // nWidth
//		   0,                      // nEscapement
//		   0,                      // nOrientation
//			FW_NORMAL,             // nWeight
//			FALSE,                 // bItalic
//			FALSE,                 // bUnderline
//		   FALSE,                      // cStrikeOut
//		OEM_CHARSET,              // nCharSet
//		OUT_DEFAULT_PRECIS,        // nOutPrecision
//		CLIP_DEFAULT_PRECIS,       // nClipPrecision
//		DEFAULT_QUALITY,           // nQuality
//		DEFAULT_PITCH | FF_DONTCARE,  // nPitchAndFamily
//		_T("宋体")); 
	m_font.CreatePointFont(100,_T("宋体"));
	CFont *pOldFont = pDC->SelectObject(&m_font);
	pDC->SetTextColor(FontColor);
	POSITION pos;
	switch(Mode)
	{
	case TOP:
		DrawRectangle(pDC,Startx,Starty,Startx+Width,Starty+15*LineDataList.GetCount()*2);
		for(i=0;i<LineDataList.GetCount();i++)
		{
			pos = LineDataList.FindIndex(i);
			pDC->ExtTextOut(Startx+2,Starty+15*i*2+1,ETO_OPAQUE,NULL,LineDataList.GetAt(pos)->LegendName,NULL);
			if(WithDot)
			DrawPoint(pDC,
				Startx+7,Starty+15*i*2+15+7,
				LineDataList.GetAt(pos)->ePointType,
				5,
				LineDataList.GetAt(pos)->LineSize,
				LineDataList.GetAt(pos)->LineColor,
				LineDataList.GetAt(pos)->PointColor);
			else
			DrawRectangle(pDC,
			Startx+2,Starty+15*i*2+15+2,Startx+Width-2,Starty+15*(i+1)*2-2,
			LineDataList.GetAt(pos)->LineSize,
			LineDataList.GetAt(pos)->LineColor,
			LineDataList.GetAt(pos)->PointColor);
		}
		break;
	case BOTTOM:
		DrawRectangle(pDC,Startx,Starty,Startx+Width,Starty+15*LineDataList.GetCount()*2);
		for(i=0;i<LineDataList.GetCount();i++)
		{
			pos = LineDataList.FindIndex(i);
			if(WithDot)
			DrawPoint(pDC,
				Startx+7,Starty+15*i*2+7,
				LineDataList.GetAt(pos)->ePointType,
				5,
				LineDataList.GetAt(pos)->LineSize,
				LineDataList.GetAt(pos)->LineColor,
				LineDataList.GetAt(pos)->PointColor);
			else
			DrawRectangle(pDC,
			Startx+2,Starty+15*i*2+2,Startx+Width-2,Starty+15*i*2+15-2,
			LineDataList.GetAt(pos)->LineSize,
			LineDataList.GetAt(pos)->LineColor,
			LineDataList.GetAt(pos)->PointColor);
			pDC->ExtTextOut(Startx+2,Starty+15*i*2+15+1,ETO_OPAQUE,NULL,LineDataList.GetAt(pos)->LegendName,NULL);
		}
		break;
	case LEFT:
		break;
	case RIGHT:
		break;
	case ON:
		break;
	case NONE:
		break;
	}
	pDC->SelectObject(pOldFont);
}
void CLine::DrawContent(CDC* pDC,int LeftTopx,int LeftTopy,int RightBottomx,int RightBottomy)
{
//	int Height = ((int)(m_Legend.GetAt(i-1).Value+0.5)-YMin)*yCoorDeta/yDeta;
	POSITION pos;
	for(int i=0;i<LineDataList.GetCount();i++)
	{
		double x1,y1,x2,y2;
		pos = LineDataList.FindIndex(i);
		if(LineDataList.GetAt(pos)->structDataArray.GetSize())
		{
			x1 = LineDataList.GetAt(pos)->structDataArray[0].XData;
			y1 = LineDataList.GetAt(pos)->structDataArray[0].YData;
		}
		for(int j=1;j<LineDataList.GetAt(pos)->structDataArray.GetSize();j++)
		{
			x2 = LineDataList.GetAt(pos)->structDataArray[j].XData;
			y2 = LineDataList.GetAt(pos)->structDataArray[j].YData;
			POINT p1,p2;
			p1.x = LeftTopx+(int)((x1-XMin)*xCoorDeta/xDeta+0.5);
			p1.y = RightBottomy-(int)((y1-YMin)*yCoorDeta/yDeta+0.5);
			p2.x = LeftTopx+(int)((x2-XMin)*xCoorDeta/xDeta+0.5);
			p2.y = RightBottomy-(int)((y2-YMin)*yCoorDeta/yDeta+0.5);
			x1 = x2;
			y1 = y2;
			
			DrawLine(pDC,p1,p2,LineDataList.GetAt(pos)->LineSize,LineDataList.GetAt(pos)->LineColor);
			if(WithDot)
			{
			if(j==1)
				DrawPoint(pDC,p1.x,p1.y,
					LineDataList.GetAt(pos)->ePointType,
					DotSize,
					LineDataList.GetAt(pos)->LineSize,
					LineDataList.GetAt(pos)->LineColor,
					LineDataList.GetAt(pos)->PointColor);
			DrawPoint(pDC,p2.x,p2.y,
				LineDataList.GetAt(pos)->ePointType,
				DotSize,
				LineDataList.GetAt(pos)->LineSize,
				LineDataList.GetAt(pos)->LineColor,
				LineDataList.GetAt(pos)->PointColor);
			}
		}
	}
}
void CLine::DrawCoordinate(CDC* pDC,int LeftTopx,int LeftTopy,int RightBottomx,int RightBottomy,BOOL WithDash)
{
	int nDeta = 5;
	int nCount = (YMax - YMin)/nDeta ;
	int nCoorDeta = (RightBottomy - LeftTopy)/nCount;
	yCoorDeta = nCoorDeta;
	while(nCoorDeta < 10 )
	{
		nDeta += 5;
		yDeta = nDeta;
		nCount = (YMax - YMin)/nDeta ;
		nCoorDeta = (RightBottomy - LeftTopy)/nCount;
		yCoorDeta = nCoorDeta;
	}
	DrawLine(pDC,LeftTopx,LeftTopy,LeftTopx,RightBottomy);
	DrawLine(pDC,LeftTopx,RightBottomy,RightBottomx,RightBottomy);
	if(WithDash)
	{
		DrawLine(pDC,RightBottomx,RightBottomy,RightBottomx,LeftTopy);
		DrawLine(pDC,RightBottomx,LeftTopy,LeftTopx,LeftTopy);
	}
	CString CoordinateValue;
	CoordinateValue.Format(_T("%3d"),YMin);
	DrawYCoordinateValue(pDC,LeftTopx-18,RightBottomy-5,CoordinateValue);
	for(int i=1;i<=nCount;i++)
	{
		if(WithDash)
			DrawDashLine(pDC,LeftTopx,RightBottomy-nCoorDeta*i,RightBottomx,RightBottomy-nCoorDeta*i);
		DrawLine(pDC,LeftTopx,RightBottomy-nCoorDeta*i,LeftTopx+5,RightBottomy-nCoorDeta*i);
		CoordinateValue.Format(_T("%3d"),YMin+nDeta*i);
		DrawYCoordinateValue(pDC,LeftTopx-18,RightBottomy-nCoorDeta*i-5,CoordinateValue);
	}

	nDeta = 5;
	nCount = (XMax - XMin)/nDeta;
	nCoorDeta = (RightBottomx-LeftTopx)/nCount;
	xCoorDeta = nCoorDeta;
	while(nCoorDeta < 10)
	{
		nDeta +=5;
		xDeta = nDeta;
		nCount = (XMax - XMin)/nDeta;
		nCoorDeta = (RightBottomx-LeftTopx)/nCount;
		xCoorDeta = nCoorDeta;
	}

	CoordinateValue.Format(_T("%d"),XMin);
	DrawXCoordinateValue(pDC,LeftTopx-7,RightBottomy+2,CoordinateValue,CBaseGr::VER,RGB(0,0,255));
	for(int j=1;j<=nCount;j++)
	{
		if(WithDash)
			DrawDashLine(pDC,LeftTopx+nCoorDeta*j,RightBottomy,LeftTopx+nCoorDeta*j,LeftTopy);
		DrawLine(pDC,LeftTopx+nCoorDeta*j,RightBottomy,LeftTopx+nCoorDeta*j,RightBottomy-5);
		CoordinateValue.Format(_T("%d"),XMin+nDeta*j);
		DrawXCoordinateValue(pDC,LeftTopx-7+nCoorDeta*j,RightBottomy+2,CoordinateValue,CBaseGr::VER,RGB(0,0,255));
	}

	DrawXName(pDC,RightBottomx-12*XName.GetLength(),RightBottomy+15,XName);
	DrawYName(pDC,LeftTopx-35,LeftTopy+12*YName.GetLength(),YName);
	DrawTitle(pDC,LeftTopx,LeftTopy,RightBottomx,RightBottomy,TitleMode);
}

⌨️ 快捷键说明

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