VS2010对话框中使用MSChart控件

现在网络上对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即可。在运行实例,成功!!

感谢大家提出的建议~

没有更多推荐了,返回首页