一、在工程中加入 mschart菜单->Project->Add To Project->Components and Controls->Registered ActiveX Controls->Microsoft Chart Control, version 6.0 (OLEDB)二、在CDemoView中加入:CMSChart m_Chart三、创建及设置m_Chart3.1 在 CDemoView::OnCreate 中创建CMSChart// CDemoView::OnCreate()CRect rc;GetClientRect(&rc);if(!m_Chart.Create("mschart", WS_CHILD| WS_VISIBLE, rc, this, 10)) return -1;3.2 在 CDemoView::OnSize 中调整 m_Chart 的大小,使之能随窗口大小变化而变化 // CDemoView::OnSizeif( m_Chart.GetSafeHwnd() )m_Chart.MoveWindow( 0, 0, cx, cy );3.3 设置 m_Chart void CDemoView::InitChart(){// 设置标题m_Chart.SetTitleText("mschart 示例");// 下面两句改变背景色m_Chart.GetBackdrop().GetFill().SetStyle(1);m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255);// 显示图例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(TRUE);// 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 轴名称// 3条曲线m_Chart.SetColumnCount(3);// 线色m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().GetVtCol or().Set(0, 0, 255);m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().GetVtCol or().Set(255, 0, 0);m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetPen().GetVtCol or().Set(0, 255, 0);// 线宽(对点线图有效)m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth (50);m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().SetWidth (100);m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetPen().SetWidth (2);// 数据点类型显示数据值的模式(对柱柱状图和点线图有效)// 0: 不显示 1: 显示在柱状图外// 2: 显示在柱状图内上方 3: 显示在柱状图内中间 4: 显示在柱状图内下方 m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().G etItem(-1).GetDataPointLabel().SetLocationType(1);m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints().G etItem(-1).GetDataPointLabel().SetLocationType(1);m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetDataPoints().G etItem(-1).GetDataPointLabel().SetLocationType(1);}3.4 设置数据 void CDemoView::DrawChart(){int nRowCount = 6;m_Chart.SetRowCount(nRowCount);VARIANT var;// 不自动标注X轴刻度m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(FALSE);// 每刻度一个标注m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerL abel(1);// 每刻度一个刻度线m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerT ick(1);// X轴名称m_Chart.GetPlot().GetAxis(0,var).GetAxisTitle().SetText("日期"); char buf[32];srand( (unsigned)time( NULL ) );for(int row = 1; row <= nRowCount; ++row){m_Chart.SetRow(row);sprintf(buf, "%d号", row);m_Chart.SetRowLabel((LPCTSTR)buf);m_Chart.GetDataGrid().SetData(row, 1, rand() * 100 / RAND_MAX, 0); m_Chart.GetDataGrid().SetData(row, 2, rand() * 100 / RAND_MAX, 0); m_Chart.GetDataGrid().SetData(row, 3, rand() * 100 / RAND_MAX, 0); }m_Chart.Refresh();}3.5 改变显示类型 // 折线图void CDemoView::OnChartLine(){m_Chart.SetChartType(3);DrawChart();}// 柱状图void CDemoView::OnChartCombi(){m_Chart.SetChartType(1);DrawChart();}// 饼状图void CDemoView::OnChartPie(){m_Chart.SetChartType(14);DrawChart();}//////////////////////////////////在设计使用上没问题,vs2005的,但做成安装包在其它电脑上安装运行出错(14007)。
为什么啊,电脑上已经安装了office,已经有mschar20.ocx了,请问是哪里出问题? ( play100 发表于 2007-11-20 11:21:00)if(!m_Chart.Create("mschart", WS_CHILD| WS_VISIBLE, rc, this, 10))我也是为什么呢?错误是建立空文档失败 ( zltianhen 发表于2007-5-5 20:07:00)我被你快搞疯了,如果大家想动态的增加曲线,并且添加曲线标签的话,最好将m_Chart.SetColumnCount(short n);这条语句放在InitChart()这个函数的开头。
我被这个小问题折磨了一晚上。
( eyon123 发表于 2006-12-22 3:49:00)首先感谢祝小斌的文章,对我很有用,thx~~大概可能是由于版本的关系,线色那段代码有点问题~~(红-绿-蓝是默认色,代码并没有起作用)修改如下:m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().Ge tItem(-1).GetBrush().GetFillColor().Set(红, 绿, 蓝); ( 3las 发表于2005-3-27 22:00:00)SyDes21没有安装mschart 控件 ( pq_vckbase 发表于 2004-1-26 12:28:00)。