Tee Chart Usage in MFC

4 篇文章 0 订阅

1、A Brief Introduction of Tee Chart

TeeChart is a Charting Library for programmers developed and managed by Steema Software of Girona, Spain. It is available as commercial and non-commercial software. Borland (later handing on the IDE business to Embarcadero Technologies) has included a standard version of TeeChart as an integral part of the toolbox palette in most Borland Delphi and C++ Builder Integrated development environment (IDEs) since 1997 and TeeChart currently forms a part of Embarcadero RAD Studio XE8. TeeChart Pro version is a commercial product that offers shareware releases for all of its formats, TeeChart. Lite for .NET is a free charting component for the Microsoft Visual Studio .NET community and TeeChart for PHP is an open-source library for PHP environments. The TeeChart Charting Library offers Charts, Maps and Gauge (instrument) in versions for Delphi VCL and FireMonkey (FMX), Activex, C Sharp (programming language) for Microsoft Visual Studio .NET, Java (programming language) and PHP. Full sourcecode has always been available for all versions except the ActiveX version. TeeChart’s user interface is translated to 37 languages.

2、Tee Chart 属性简介

TeeChart的安装方法网上有很多,这里不再赘述。把TeeChart控件添加到工程中后,将其拖到对话框中,然后通过ClassWizard定义一个类变量m_TeeChart。

TeeChart的主类是TChart,TChart类存在众多的属性方法和事件,下面介绍一些主要的属性:

  • TChart.Height:图表的高度;可用下列语句获取或设置图表的高度
m_TeeChart.SetHeight(100); //设置图表高度为100
long Height_size = m_TeeChart.GetHeight(); //获取当前图表的高度
  • TChart.Width:图表的宽度;用法与高度一致,就不在赘述
  • TChart.Header:图表的标题;图表可以拥有多级标题,可用下列语句设置图表的标题以及追加标题
m_TeeChart.GetHeader().GetText()
    .SetItem(0, COleVariant(_T(“TeeChart 使用范例”)));
m_TeeChart.GetHeader().GetText().Add(COleVariant(_T(“追加的标题”)));  
  • TChart.Series:序列;Series是要显示的数据的主体,在一个图表中可以有一个或者多个序列,每一个序列可以有不同的显示类型,例如Line、Bar、Pic等等,稍后将单独描述。
  • TChart.Axis:坐标轴;用来设置坐标轴的属性
m_TeeChart.GetAxis().GetBottom().GetTitle().SetCaption(_T("X轴的标题")); 
// 设置X轴的标题,准确的说应该是设置底部轴的标题
m_TeeChart.GetAxis().GetLeft().GetTitle().SetCaption(_T("Y轴的标题"));
// 设置左侧轴的标题
m_TeeChart.GetAxis().GetBottom().SetMinMax(0, 100);
//设置X轴的范围
  • TChart.Legend:图例,图例就是下图中右侧的部分
    这里写图片描述
  • 下列语句可以将图列隐藏
m_TeeChart.GetLegend().SetVisible(FALSE); //隐藏图例

3、TeeChart画二维图

画图需要添加序列,添加序列有两种方式:通过控件添加和通过代码添加。

(1)通过控件添加

  • 右击控件选择Properties,在TeeChart Pro Editor选项卡中单击Edit Chart,就可以在打开的对话框中编辑TeeChart控件的属性,如下图。
    这里写图片描述

  • 单击Add按钮,选择第一个Line类型作为示范,如何点击OK。如下图。
    这里写图片描述

  • 添加完序列之后,接下来就要往序列中添加数据了。有三种方式添加数据:

    • 第一种方法只能添加一些随机数:

      m_TeeChart.Series(0).FillSampleValues(50); //Series函数的参数表示序列的索引值,这里只有一个Line序列,因此Line序列的索引值为0
    • 第二种方法可以添加指定的数据:

      for(int i=0; i<10; i++)
                  m_TeeChart.Series(0).AddXY(i, rand()%10, NULL,RGB(255,0,255));  
      //AddXY函数中第一个参数是X轴的数据,第二个参数是Y轴的数据,
      //第三个参数是X轴标记,第四个参数表示线条的颜色,rand()%10,表示生成10以内的随机数
      • 此代码执行的效果如下图所示
        这里写图片描述

      • 我们在第三个参数上添加一个字符串

        for(int i=0; i<10; i++)
        m_TeeChart.Series(0).AddXY(i, rand()%10, _T("时间"), RGB(255,0,255));
      • 显示结果如下:
        这里写图片描述

      • 如果不想显示右侧的图例,可以用下列语句将其隐藏起来:

        m_TeeChart.GetLegend().SetVisible(FALSE);

        这里写图片描述

    • 第三种方法可以添加指定的数组:

      
      #define MAX_SIZE 20
      
      //定义数组
          COleSafeArray XValues;
      COleSafeArray YValues;
      //定义的长度只要大于所创建的数组的长度即可
      DWORD Xnum[] = {MAX_SIZE};
      DWORD Ynum[] = {MAX_SIZE};
      XValues.Create(VT_R8, 1, Xnum);
      YValues.Create(VT_R8, 1, Ynum);
      
      double tmp;
      long index=0;
      for(int i=0; i<MAX_SIZE; i++)
      {
              tmp = i;
          XValues.PutElement(&index, &tmp);
          tmp = rand()%50;
          YValues.PutElement(&index, &tmp);
                  index++;
       }
       //向序列中添加数据
       m_TeeChart.Series(0).AddArray(MAX_SIZE, XValues, YValues);

      这里写图片描述

      • 如果标记Y轴的值,可以用下列语句:

        m_TeeChart.Series(0).GetMarks().SetVisible(TRUE); 

        这里写图片描述

      • 设置X轴与Y轴的标题:

        m_TeeChart.GetAxis().GetLeft().GetTitle().SetCaption(_T("路程"));
        m_TeeChart.GetAxis().GetBottom().GetTitle().SetCaption(_T("速度"));

        这里写图片描述

(2)通过代码块添加

m_TeeChart.AddSeries(0); //AddSeries函数的参数表示添加序列的类型 0表示添加的序列是折线图      
  • 画多条曲线的折线图

    m_TeeChart.GetAspect().SetView3D(FALSE); //以2D的效果显示
    m_TeeChart.AddSeries(0); //添加一个Line序列
    m_TeeChart.AddSeries(0); //添加一个Line序列
    
    m_TeeChart.Series(0).FillSampleValues(50); //向第一个Line序列中添加数据
    m_TeeChart.Series(1).FillSampleValues(50); //向第二个Line序列中添加数据
    
    m_TeeChart.Series(0).SetColor(RGB(255, 0, 0)); // 设置第一条曲线的颜色为红色
    m_TeeChart.Series(1).SetColor(RGB(0, 255, 0)); //设置第二条曲线的颜色为绿色
    
    m_TeeChart.Series(0).SetTitle("时间"); //设置第一条曲线的图例标题为 时间
    m_TeeChart.Series(1).SetTitle("速度"); //设置第二条曲线的图例标题为 速度
    
    // m_TeeChart.Series(0).GetMarks().SetVisible(TRUE); //显示第一条曲线的标记
    // m_TeeChart.Series(1).GetMarks().SetVisible(TRUE); //显示第二条曲线的标记
  • 代码运行结果如下图所示:
    这里写图片描述

  • 柱状图以及其他2D图形的画法与折线图类似,只不过添加序列的类型不同,这里就不在赘述。

3、TeeChart画三维图

画三维图,就要添加三维类型的序列。这里我们仍然以折线图作为范例。右击控件选择Properties,在TeeChart Pro Editor选项卡中单击Edit Chart,在弹出来的对话框中单击Add,在3D选项卡中选中Point 3D类型,单击左下角的倒三角,选择 No Point风格,如下图所示。

这里写图片描述

  • 下面我们开始添加代码:
m_TeeChart.GetAspect().SetView3D(TRUE); //显示3D效果
    for(int i=0; i<20; i++)
        for(int j=0; j<12; j++)
               m_TeeChart.Series(0).GetAsPoint3D().AddXYZ(i, j*i, j, NULL, RGB(255,255,0));
//向序列中添加数据,因为这里我们用到Point3D类型的序列,因此用到了GetAsPoint3D这个类数组

这里写图片描述

  • 显示Z轴:
m_TeeChart.GetAspect().SetView3D(TRUE); //显示3D效果
for(int i=0; i<20; i++)           
    for(int j=0; j<12; j++)
       m_TeeChart.Series(0).GetAsPoint3D().AddXYZ(i, j*i, j, NULL, RGB(255,255,0));     
     m_TeeChart.GetLegend().SetVisible(FALSE);      //隐藏图例
m_TeeChart.GetAxis().GetDepth().SetVisible(TRUE);  //显示Z轴
m_TeeChart.GetAxis().GetDepth().GetLabels().SetVisible(TRUE);  //显示Z轴上的坐标
m_TeeChart.GetAxis().GetDepth().GetLabels().SetStyle(0);  //设置显示坐标的风格

这里写图片描述

  • Z轴太窄了,我们可以调宽些:
m_TeeChart.GetAspect().SetChart3DPercent(50); //参数范围在0~100之间

这里写图片描述

  • 画柱状图与画折线图类似,不过添加序列的时候选择Tower类型序列:
m_TeeChart.GetAspect().SetView3D(TRUE);
for(int i=0; i<5; i++)
    for(int j=0; j<5; j++)
        m_TeeChart.Series(0).GetAsTower().AddXYZ(i, j*i, j,  NULL, RGB(255,255,0)); //向Tower序列中添加数据
m_TeeChart.GetLegend().SetVisible(FALSE);
m_TeeChart.GetAxis().GetDepth().SetVisible(TRUE);
m_TeeChart.GetAxis().GetDepth().GetLabels().SetVisible(TRUE);
m_TeeChart.GetAxis().GetDepth().GetLabels().SetStyle(0);
m_TeeChart.GetAspect().SetChart3DPercent(50);

这里写图片描述

4、TeeChart保存图片

TeeChart可以保存多钟格式的图片,bmp、jpeg、pdf、gif等,对于这些功能的定义在CExport类中声明。我们打开CExport类,看看它的成员函数有那些:

void CopyToClipboardBitmap();
void CopyToClipboardMetafile(BOOL Enhanced);
void SaveToBitmapFile(LPCTSTR FileName);
void SaveToFile(LPCTSTR FileName);
void SaveToJPEGFile(LPCTSTR FileName, BOOL Gray, long Performance, long Quality, long Width, long Height);
void SaveToMetafile(LPCTSTR FileName);
void SaveToMetafileEnh(LPCTSTR FileName);
void ShowExport();
CString SaveChartDialog();
void ConvertTeeFileToText(LPCTSTR InputFile, LPCTSTR OutputFile);
VARIANT Stream(long StreamType);
CJPEGExport GetAsJPEG();
CPNGExport GetAsPNG();
CGIFExport GetAsGIF();
CBMPExport GetAsBMP();
CPCXExport GetAsPCX();
CMetafileExport GetAsMetafile();
CNativeExport GetAsNative();
CXMLExport GetAsXML();
CXLSExport GetAsXLS();
CHTMLExport GetAsHTML();
CTextExport GetAsText();
void EmailFile(LPCTSTR FileName, LPCTSTR Subject);
CPDFExport GetAsPDF();
CEPSExport GetAsEPS();
CSVGExport GetAsSVG();
CString GetLabelHeader();
void SetLabelHeader(LPCTSTR lpszNewValue);
CXAMLExport GetAsXAML();
void SaveToXMLFile(LPCTSTR FileName, BOOL IncludeData, BOOL XMLHeader);
VARIANT SaveToXMLStream(BOOL IncludeData, BOOL XMLHeader);

很显然,若想保存bmp格式的图片,需要用SaveToBitmapFile函数,其参数就是图片的绝对路径。而SaveToJPEGFile函数是用来保存jpeg图片的,它有五个参数,FileName是文件存储的路径,Gray表示是否保存为黑白图像,Performance表示JPEG是生成质量优先还是速度优先,Quality是从0到100的整数,100表示生成的图片质量最好,Width和Height表示图片的像素,-1表示以TeeChart的宽和高。

  • 下面是代码示例,生成bmp和jpeg格式的图片:
m_TeeChart.GetExport().SaveToBitmapFile(_T("C:\\1.bmp"));   
m_TeeChart.GetExport().SaveToJPEGFile(_T("C:\\4.jpeg", 0, 0, 100, -1,-1 )); //Gray为0表示生成彩色图片
  • 那么gif、png等其他格式的图片如何保存呢?这就需要用到GetAsGIF、GetAsPNG这些类了:
m_TeeChart.GetExport().GetAsGIF().SaveToFile(_T("C:\\1.gif"));  //保存为GIF格式
m_TeeChart.GetExport().GetAsBMP().SaveToFile(_T("C:\\1.bmp"));  //保存为BMP格式
m_TeeChart.GetExport().GetAsJPEG().SaveToFile(_T("C:\\1.jpeg")); //保存为jpeg格式
m_TeeChart/GetExport().GetAsPDF().SaveToFile(_T("C:\\1.pdf"));  //保存为pdf格式

Teechart (简介)
MFC TeeChart 用法整理一 (基础知识)
MFC TeeChart 用法整理二 (画二维图)
MFC TeeChart用法整理 三 (画三维图)
MFC TeeChart用法整理 四 (保存图片)
Teechart官网
TeeChart Pro v8 ActiveX 完美破解版

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值