VS2019 MFC Teechart V5.1曲线控件使用方法Teechart Activex V5.1控件绘图控件 动态绘图

Teechart控件安装注册:

        1. 将TeeChart5.ocx 复制到C:\Windows\SysWOW64。
        2. 找到同目录下的cmd.exe。
        3. 右键 管理员身份 打开 ,此刻进入的是system32 (不是管理员打开cmd的话,用win + R的话,会提示模块已加载,但对DllRegisterServer的调用失败)。
        4. 使用cd命令,进入 64位的目录 cd C:WindowsSysWOW64。
        5. 执行 regsvr32 TeeChart5.ocx 系统会提示成功。

 Teechart控件源文件:

        VS2019通过MFC Typelib类向导添加Teechart相关类后会发生一些意想不到的错误,例如类型确实,文件缺失等错误。解决办法就是不适用MFC TypeLib添加Teechart的相关类。通过手动添加的方式来添加相关类文件。

 Teechart动态用法:

        下面主要介绍动态添加曲线、改变曲线颜色、设置曲线外观、改变曲线类型、改变面板颜色、面板样式等相关的功能,导入导出功能。

1、 Teechart添加曲线:

        手动添加相关类,添加相关类的头文件。在添加类的头文件种增加如下语句,编译报错的都增加相关的重命名代码。

#import "C:\\WINDOWS\\SysWow64\\TeeChart5.ocx" no_namespace rename("LoadImage","myLoadImage") rename("TextOut", "myTextOut")

        #include"CSeries.h"
        #include"MacroDefinition.h"
        #include"CTCHART_CURVE.h"
        #include"CAxes.h"
        #include"CAxis.h"
        #include"CGradient.h"
        #include"CPanel.h"
        #include"CLegendSymbol.h"
        #include"CAspect.h"
        #include"CChartGrid.h"
        #include"CPen.h"
        #include"CJPEGExport.h"
        #include"CBMPExport.h"
        #include"CExport.h"
        #include"CLineSeries.h"
        #include"CFastLineSeries.h"
        #include"CImport.h"
        #include"CPrinter.h"

变量定义

        定义一个Teechart图标控件类型变量和3个曲线类变量

        CTCHART_CURVE m_TemCurve;

       CSeries       m_TemZoneChannelOne, m_TemZoneChannelTwo, m_TemZoneChannelThree;   

在timer种自动添加曲线 

void CTemCurveControl::OnTimer(UINT_PTR nIDEvent)
{
	switch (nIDEvent)
	{
	case 1:
	{
		CString str;
		m_TemZoneChannelOne   = (CSeries)m_TemCurve.Series(0);
		m_TemZoneChannelTwo   = (CSeries)m_TemCurve.Series(1);
		m_TemZoneChannelThree = (CSeries)m_TemCurve.Series(2);
		double y = 0;

		data++;
		m_TemZoneChannelOne.AddXY(double(data) / 60, sin(double(data) / 5), NULL, 0);//A为横坐标 Z1为纵坐标画连线、
		m_TemZoneChannelTwo.AddXY(double(data) / 50, cos(double(data) / 50), NULL, 0);//A为横坐标 Z1为纵坐标画连线
		m_TemZoneChannelThree.AddXY(double(data) / 60, cos(double(data) / 5), NULL, 0);//A为横坐标 Z1为纵坐标画连线
		break;
	}
	default:
		break;
	}
	CDialogEx::OnTimer(nIDEvent);
}

 2、改变曲线颜色(简单封装)

void CTemCurveControl::OnSetSeriesColor(CSeries mCeries,COLORREF mColor)
{
	mCeries.put_Color(mColor);
}

 3、改变轴的范围(简单封装)

void CTemCurveControl::OnSetAxisMinAndMaxValue(CTCHART_CURVE& mTeechar, double Xmini, double Xmax, double Ymin, double Ymax)
{
	CAxes    m_Axis= mTeechar.get_Axis();
	CAxis    m_BottomXAxis = m_Axis.get_Bottom();
	CAxis    m_LeftYAxis = m_Axis.get_Left();
	m_BottomXAxis.SetMinMax(Xmini, Xmax);
	m_LeftYAxis.SetMinMax(Ymin, Ymax);
	m_BottomXAxis.Scroll(1.0,TRUE);
	
	m_BottomXAxis.put_GridCentered(TRUE);
}

4、启用面板渐变(简单封装)

void CTemCurveControl::OnEnablePanelGradientVisible(CTCHART_CURVE& mTeechar,BOOL mVisible)
{
	CPanel   m_Panel = mTeechar.get_Panel();
	CGradient m_Gradiet = m_Panel.GetGradient();
	m_Gradiet.SetVisible(mVisible);
}

 5、改变渐变颜色(简单封装)

void CTemCurveControl::OnSetTeechartPanelGadientVisible(CTCHART_CURVE& mTeechar,COLORREF mStartColor, COLORREF mEndColor/*,BOOL Visible*/)
{
	CPanel   m_Panel = mTeechar.get_Panel();
	CGradient m_Gradiet = m_Panel.GetGradient();
	m_Gradiet.SetStartColor(mStartColor);
	m_Gradiet.SetEndColor(mEndColor);
	

}

6、启用3D外观(简单封装)

void CTemCurveControl::OnSetTeechartAspect3DViewVisible(CTCHART_CURVE& mTeechar,BOOL IsView3D)
{
	CAspect Asp = mTeechar.get_Aspect();
	Asp.put_View3D(IsView3D);
}

 7、改变线型(简单封装)

void CTemCurveControl::OnCbnSelchangeComboLinestyleSelect()
{
	int m_LineStyleSel = 0;
	m_LineStyleSel = m_LineStyleSelectSet.GetCurSel();
	switch (m_LineStyleSel)
	{
	case 0:
		m_FastLineStyle = psSolid;
		break;
	case 1:
		m_FastLineStyle = psDash;
		break;
	case 2:
		m_FastLineStyle = psDot;
		break;
	case 3:
		m_FastLineStyle = psDashDot;
		break;
	case 4:
		m_FastLineStyle = psDashDotDot;
		break;
	case 5:
		m_FastLineStyle = psInsideFrame;
		break;
	case 6:
		m_FastLineStyle = psSmallDots;
		break;
	default:
		break;
	}
	for (int i = 0; i < m_TemCurve.get_SeriesCount(); i++)
	{
		OnSetSeriesStype(m_TemCurve, i, m_FastLineStyle);
		printf("OnSetSeriesStype(m_TemCurve, %d, %d)\n",i, m_FastLineStyle);
	}
}
void CTemCurveControl::OnSetSeriesStype(CTCHART_CURVE &mTchart, long CeriesIndex, long mStype)
{
	CSeries mSeries = mTchart.Series(CeriesIndex);
	CFastLineSeries mLines= mSeries.get_asFastLine();
	CPen1 mPen = mLines.get_LinePen();
	mPen.SetStyle(mStype);
}

 8、改变线宽(简单封装)

void CTemCurveControl::OnCbnSelchangeComboLinewithSelect()
{
	int m_LineWithSel = 0;
	m_LineWithSel = m_LineWithSelectSet.GetCurSel();
	switch (m_LineWithSel)
	{
	case 0:
		m_FastLineWith = 1;
		break;
	case 1:
		m_FastLineWith = 2;
		break;
	case 2:
		m_FastLineWith = 3;
		break;
	case 3:
		m_FastLineWith = 4;
		break;
	case 4:
		m_FastLineWith = 5;
		break;
	default:
		break;
	}
	for (int i = 0; i < m_TemCurve.get_SeriesCount(); i++)
	{
		OnSetSeriesLineWith(m_TemCurve, i, m_FastLineWith);
		printf("OnSetSeriesLineWith(m_TemCurve, %d, %d)\n",i, m_FastLineWith);
	}
}
void CTemCurveControl::OnSetSeriesLineWith(CTCHART_CURVE& mTchart, long CeriesIndex, long mLineWith)
{
	CSeries mSeries = mTchart.Series(CeriesIndex);
	CFastLineSeries mLines = mSeries.get_asFastLine();
	CPen1 mPen = mLines.get_LinePen();
	mPen.SetWidth(mLineWith);

}

  9、清除曲线(简单封装)

void CTemCurveControl::OnClearAllSeries(CTCHART_CURVE& mTchart)
{
	for (int i = 0; i < mTchart.get_SeriesCount(); i++)
	{
		((CSeries)(mTchart.Series(i))).Clear();
	}
}

10、面板颜色设置(简单封装) 

void CTemCurveControl::OnSetTeeChartPanelBackGroudColor(CTCHART_CURVE& mTeechar, COLORREF mPanelBkColor)
{
	CPanel   m_Panel = mTeechar.get_Panel();
	m_Panel.SetColor(mPanelBkColor);
}

 11、网格颜色设置(简单封装) 

void CTemCurveControl::OnSetTeechartAxisGridePenColor(CTCHART_CURVE& mTeechar, COLORREF Xaxis, COLORREF Yaxis)
{
	CAxes    m_Axis = mTeechar.get_Axis();
	CAxis    m_BottomXAxis = m_Axis.get_Bottom();
	CAxis    m_LeftYAxis = m_Axis.get_Left();
	CPen1	 mGridePendLeft   = m_LeftYAxis.get_GridPen();
	CPen1	 mGridePendBotton = m_BottomXAxis.get_GridPen();
	mGridePendLeft.SetColor(Xaxis);
	mGridePendBotton.SetColor(Yaxis);
}

  12、保存曲线(简单封装)

void CTemCurveControl::OnBnClickedButtonSaveTeechart()
{

	CString CFilePathName;
	CString mJpg, mTee, mBmp,mpdf;

	TCHAR szFilter[] = _T("JPG图片文件(.JPG)|*.JPG|文本文件(.txt)|*.txt|配置文件(.ini)|*.ini|word文件(.doc)|*.doc|曲线文件(.tee)|*.tee|位图文件(.bmp)|*.bmp|所有文件(*.*)|*.*||");
	CFileDialog dlg(FALSE, _T(""),_T("ReflowerTempretureCurve"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this,0, TRUE);

	CExport mSave = m_TemCurve.get_Export();
	if (dlg.DoModal() == IDCANCEL)
	{
		MessageBox(_T("保存文件已取消!"), _T("信息提示!"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);
		return;
	}
	else 
	{
		switch (dlg.m_ofn.nFilterIndex)
		{
		case 1:
			CFilePathName = dlg.m_ofn.lpstrFile;
			CFilePathName = CFilePathName + dlg.m_ofn.lpstrDefExt;

			mSave.get_asJPEG();
			mSave.SaveToJPEGFile(CFilePathName, jpegBestQuality, 0, 100, 1023, 643);
			break;
		case 5:
			CFilePathName = dlg.m_ofn.lpstrFile;
			CFilePathName = CFilePathName + dlg.m_ofn.lpstrDefExt;

			mSave.SaveToFile(CFilePathName);
			break;
		case 6:
			CFilePathName = dlg.m_ofn.lpstrFile;
			CFilePathName = CFilePathName + dlg.m_ofn.lpstrDefExt;

			mSave.get_asBMP();
			mSave.SaveToBitmapFile(CFilePathName);
			break;
		case 7:
			CFilePathName = dlg.m_ofn.lpstrFile;
			CFilePathName.TrimRight(_T(".JPG"));
			CFilePathName = CFilePathName + dlg.m_ofn.lpstrDefExt;

		    mJpg = CFilePathName + _T(".JPG");
			mSave.get_asJPEG();
			mSave.SaveToJPEGFile(mJpg, jpegBestQuality, 0, 100, 1023, 643);

			mTee = CFilePathName + _T(".tee");
			mSave.SaveToFile(mTee);

			mBmp = CFilePathName + _T(".bmp");
			mSave.get_asBMP();
			mSave.SaveToBitmapFile(mBmp);

			//mSave.GetAsPDF();
			/*mpdf= CFilePathName + _T(".pdf");
			mExportPdf.SaveToFile(CFilePathName);*/
			break;
		default:
			break;
		}

	}
	/*GetSaveFileName(&dlg.m_ofn);
	dlg.GetFileExt();*/

	MessageBox(_T("温度曲线已保存到:") + CFilePathName + _T("目录下!"), _T("信息提示:"), MB_OK | MB_ICONINFORMATION);

}

   13、导入曲线(简单封装)//5.1导入导出PDF好像有问题,目前没有解决。

void CTemCurveControl::OnBnClickedButtonOpenTeechartFile()
{
	TCHAR szFilter[] = _T("曲线文件(.tee)|*.tee|文本文件(*.txt)|*.txt|所有文件(*.*|*.*||");
	CFileDialog fileDlg(TRUE, _T(""), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this, 0, TRUE);
	CString strFilePath;
	if (IDOK == fileDlg.DoModal())
	{
		strFilePath = fileDlg.GetPathName();
		CImport mImfile = static_cast (m_TemCurve.get_Import());
		if (strFilePath!=_T(""))
		{
			mImfile.LoadFromFile(strFilePath);
		}
		else
		{
			printf("strFilePath = fileDlg.GetPathName(),获取文件名为空!\n");
			MessageBox(_T("要导入的文件为空,请选择曲线文件后再试!:"), _T("信息提示:"), MB_OK | MB_ICONINFORMATION);
			return;
		}
	}
}

VS2019 MFC Teechart V5.1曲线控件使用方法Teechart Activex V5.1控件绘图控件 动态绘图_第1张图片

VS2019 MFC Teechart V5.1曲线控件使用方法Teechart Activex V5.1控件绘图控件 动态绘图_第2张图片

VS2019 MFC Teechart V5.1曲线控件使用方法Teechart Activex V5.1控件绘图控件 动态绘图_第3张图片

曲线导出功能,曲线导出可导出为BMP文件、JPG文件以及.tee文件。保存时选择所有类型能同时保存3种格式的文件。 

 VS2019 MFC Teechart V5.1曲线控件使用方法Teechart Activex V5.1控件绘图控件 动态绘图_第4张图片

 VS2019 MFC Teechart V5.1曲线控件使用方法Teechart Activex V5.1控件绘图控件 动态绘图_第5张图片

 曲线文件导入,Teechart的曲线文件名后缀为.tee。

 VS2019 MFC Teechart V5.1曲线控件使用方法Teechart Activex V5.1控件绘图控件 动态绘图_第6张图片

Teechart的曲线控件功能非常强大,此处不做过多详细的说明,只是告诉大家动态设置的一些方法,其他功能自己慢慢摸索即可。

你可能感兴趣的:(MFC,C++,mfc,windows,c++,visual,studio,microsoft)