VC++对MSChart的学习

最近项目中需要绘制图表(饼图、柱图),前段时间使用TeeChart,绘制的3D效果确实不错,由于TeeChart是商业版的,怕侵版权,呵呵!最后研究了下MSChart.虽说是2D的效果,但是功能也能实现.整理下对MSChart在MFC中一些常用的设置,方便以后其他绘图项目.

绘图控件:MSCHRT20.OCX  版本:6.0.81.77  注册方式:把MSCHRT20.OCX 最好拷贝到system32下面注册,点击“开始”-“运行(R)...”输入:regsvr32 MSCHRT20.OCX 

注册成功后就可以在我们的工程下作图了.

   1.打开VC6.0,选择“MFC AppWizard(exe)” 项目名称:MSChartDemo,选择“基于对话框”,点击OK完成.

   2. Project--Add To Project--Components and Controls..---Registered ActiveX Controls---Microsoft Chart Control, version 6.0 (OLEDB)--Insert,根据自己的需要添加该控件所需的类,当然你也可以添加全部类.

   3.把MSchart 控件拖到对话框上,调整位置,给该控件添加变量m_Chart。部分代码也是参考网上其它朋友的,代码如下:

#include "mschart.h"
#include "VcAxis.h"
#include "VcAxisTitle.h"
#include "VcAxisScale.h"
#include "VcBackdrop.h"
#include "VcBrush.h"
#include "VcCategoryScale.h"
#include "VcColor.h"
#include "VcDataGrid.h"
#include "VcDataPoint.h"
#include "VcDataPoints.h"
#include "VcDataPointLabel.h"
#include "VcFill.h"
#include "VcPen.h"
#include "VcPlot.h"
#include "VcSeries.h"
#include "VcSeriesCollection.h"
#include "VcTextLayout.h"
#include "VcValueScale.h"

void CMSChartDemoDlg::InitChart()
{
 // 设置标题
 m_Chart.SetTitleText("mschart示例");

 // 下面两句改变背景色
 m_Chart.GetBackdrop().GetFill().SetStyle(1);
 m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255);

//设置绘制列的个数,默认是5个,如果需要绘制多个柱形条,必须调用

 m_Chart.SetColumnCount(ColumnCount);

// 显示图例
 m_Chart.SetShowLegend(TRUE);
 m_Chart.SetColumn(1);
 m_Chart.SetColumnLabel((LPCTSTR)"1号机");
 m_Chart.SetColumn(2);
 m_Chart.SetColumnLabel((LPCTSTR)"2号机");
 m_Chart.SetColumn(3);
 m_Chart.SetColumnLabel((LPCTSTR)"3号机");

// 栈模式
 m_Chart.SetStacking(FALSE);

// Y轴设置
 VARIANT var;
 m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetAuto(FALSE); // 不自动标注Y轴刻度
 m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMaximum(100); // Y轴最大刻度
 m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinimum(0);  // Y轴最小刻度
 m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMajorDivision(5); // Y轴刻度5等分
 m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinorDivision(1); // 每刻度一个刻度线
 m_Chart.GetPlot().GetAxis(1,var).GetAxisTitle().SetText("小时"); // Y轴名称

 m_Chart.GetPlot().GetAxis(1,var).GetAxisTitle().GetTextLayout().SetOrientation(1);//设置Y轴标题的显示方向 0-代码水平 1-代表垂直 2-字头朝左 3-字头朝右

m_Chart.GetPlot().GetAxis(2,var).GetAxisScale().SetHide(TRUE);  //隐藏右边的Y轴

#if 0
 //线色(对点线图有效)
 pMSchart->GetPlot().GetSeriesCollection().GetItem(1).GetPen().GetVtColor().Set(0, 0, 255);
 pMSchart->GetPlot().GetSeriesCollection().GetItem(2).GetPen().GetVtColor().Set(255, 0, 0);
 pMSchart->GetPlot().GetSeriesCollection().GetItem(3).GetPen().GetVtColor().Set(0, 255, 0);

 //线宽(对点线图有效)
 pMSchart->GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(50);
 pMSchart->GetPlot().GetSeriesCollection().GetItem(2).GetPen().SetWidth(100);
 pMSchart->GetPlot().GetSeriesCollection().GetItem(3).GetPen().SetWidth(2);
#endif

// 数据点类型显示数据值的模式(对柱柱状图和点线图有效) 6: 数据显示在柱图、饼图外

m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(6);
m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(6);
m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(6);

//设置显示图形方式 1--柱图 14--饼图

m_Chart.SetChartType(1);

 void CMSChartDemoDlg::DrawChart()

{

m_Chart.SetRowCount(1);

VARIANT var;
 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(FALSE);   // 不自动标注X轴刻度
 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerLabel(1);// 每刻度一个标注
 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerTick(1); // 每刻度一个刻度线
// m_Chart.GetPlot().GetAxis(0,var).GetAxisTitle().SetText("日期");   // X轴名称

m_Chart.SetRow(1);
m_Chart.SetRowLabel(XAxisTitle);

//设置数据

m_Chart.GetDataGrid().SetData(1, 1, 33, 0);
m_Chart.GetDataGrid().SetData(1, 2, 33, 0);
m_Chart.GetDataGrid().SetData(1, 3, 33, 0);

//设置每个图形区域的颜色

m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetBrush().GetFillColor().Set(190,190,190);
m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints().GetItem(-1).GetBrush().GetFillColor().Set(220,220,190);
m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetDataPoints().GetItem(-1).GetBrush().GetFillColor().Set(102,102,225);

//刷新

m_Chart.Refresh();

}

  

你可能感兴趣的:(mfc,vc++,图形,mschart)