现在网络上对MSChart控件(画各种统计图)的使用基本上利用VC6.0完成。虽然VC6.0是一个很经典的版本,但是对于现在某些方面的需求还是不能很方便的满足,例如加载各种格式的图片(缺少CImage 类,如果有知道很方便调用的大牛也可已给我讲讲,小弟将不胜感激)。
现目前网络上对于VS调用MSChart控件的文章寥寥可数,基本上分为两种:1、将VC6.0中的生成文件copy入VS工程,然后进行相应的操作(本人试验未成功)。2、利用VS中的CMschart1这个类进行调用。
下面我主要对第二种成功过的方法进行介绍:
1、首先,在很多人安装的Vs2010版本中没有Microsoft chart control控件。可先按照网上安装Microsoft chart control控件的方法,下载
mschrt20.ocx
,放在system32中,安装并注册控件,网上材料很多,不在赘述。
2、然后,建立工程,选择对话框程序。添加Microsoft chart control控件(选择ActiveX控件中com中找到,添加ActiveX控件: Tools->choose toolbox items->COM components 选择Microsoft chart control )。
3、添加类 Project->Addclass ->MFC class from Typelib 选择 Microsoft chart control 。初学者可以全部添加,这时工程中会生成许多CVc开头的头文件。
下面就可以编写代码了:
首先添加头文件:
#include <windows.h>
#import <msdatsrc.tlb> no_namespace
#import <mschrt20.ocx> no_namespace
(本人就是上面这两句没有添加,浪费了两天时间整这个玩意。。。。)
#include "CDMSChart.h"
#include "CVcPlot.h"
#include "CVcAxis.h"
#include "CVcValueScale.h"
#include "CVcSeriesCollection.h"
#include "CVcSeries.h"
#include "CVcPen.h"
#include "CVcCategoryScale.h"
#include "CVcColor.h"
#include "CVcDataGrid.h"
#include "CVcBackdrop.h"
#include "CVcFill.h"
#include "CVcBrush.h"
#include "CVcDataPoints.h"
#include "CVcDataPoint.h"
#include "CVcDataPointLabel.h"
#include "CVcAxisTitle.h"
相关函数头文件,你懂得。
特别注意的是,在VS2010中,许多对该空间操作的函数发生了改变。原来set开头的函数都变为了put_,例如
m_Chart.put_TitleText(L"Plot");
在原来的版本中是:
m_Chart.SetTitleText(L"Plot");
只要注意这个问题,许多函数的使用与VC6.0中基本类似。
下面附一些使用代码作为参考:
CVcBackdrop vcBackdrop;
CVcFill vcFill;
//m_Chart.GetBackdrop().GetFill().SetStyle(1);
vcBackdrop = m_Chart.get_Backdrop();
vcFill = vcBackdrop.get_Fill();
vcFill.put_Style(1);
//m_ctrlChart.get_Backdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255);
CVcBrush vcBrush;
CVcColor vcColor;
vcBrush = vcFill.get_Brush();
vcColor = vcBrush.get_FillColor();
vcColor.Set(255, 255, 255);
VARIANT var;
CVcPlot vcPlot = (CVcPlot)m_Chart.get_Plot();
CVcAxis vcAxis = (CVcAxis)vcPlot.get_Axis(1,var);
CVcValueScale vcValueScale = vcAxis.get_ValueScale();
vcValueScale.put_Auto(FALSE);// 不自动标注Y轴刻度
vcValueScale.put_Maximum(100);// Y轴最大刻度
vcValueScale.put_Minimum(0);// Y轴最小刻度
vcValueScale.put_MajorDivision(4);// Y轴刻度5等分
vcValueScale.put_MinorDivision(0);// 每刻度一个刻度线
CVcAxisTitle vcAxisTitle = vcAxis.get_AxisTitle();// 名称
vcAxisTitle.put_Text(_T("Y轴"));
小弟也是新手一枚,许多地方还有很多的不足,望各位大侠批评指正。
补充:
看见很多人说下载的资源调试不通过,我还以为是我的代码出了问题,今个儿又从新调试了一次。发现很多调试不通过的同学都是因为空间没有注册。所以在此做一个补充:
mschrt20.ocx下载地址:
http://download.csdn.net/detail/wanglihongwm/6431169
注册方法:复制本文件到C盘window/system32/下,然后再命令行中输入regsvr32 mschrt20.ocx即可。在运行实例,成功!!
感谢大家提出的建议~