深入浅出CChart 每日一课——快乐高四第二十五课 仪琳师妹,ActiveX控件恒山本部见性峰之VC篇

常见的波形图控件,如大厂的MsChart,TeeChart,国产的St-Curve等,大多都采用ActiveX控件的形式发布。

CChart的发布方式则是普通的Dll动态链接库。

这两种方式不好笼统地说哪个好哪个不好,各有各的应用场合。就笨笨个人来说,对ActiveX控件不太感冒,因为它需要操作注册表。

实际上,大多数情况下,普通的动态链接库都可以满足使用要求,且更方便。

但ActiveX控件的形式也有其优点,好些朋友也希望我能发布ActiveX控件版本的CChart。

为此,笨笨利用VC里面的ATL模板,开发了一个功能简化版的CChart。ActiveX控件需要采用COM技术,而笨笨对COM不太熟悉,所以这个开发一开始有点吃力。好在目前框架已经搭好,只需要往里面增加内容就可以了。目前,ActiveX版的CChart各项基本功能都已经具备,但添加的接口比较少,由于这个版本使用的人不多,暂时也没有大规模扩充接口的计划。

这一课就介绍一下CChart的ActiveX模式。

首先请在www.cchart.net网站下载CChart控件版PlotCom.7z,并把这个文件解压到合适的位置。实际上,我们需要的只是PlotCom.dll这个文件。

A25.1 控件注册和反注册

要使用ActiveX版本,必须在Windows系统中注册这个控件。注册方法是打开CMD命令窗口,一路cd到PlotCom.dll文件所在位置,然后输入如下命令。

regsvr32 PlotCom.dll

不出意外的话,系统会弹出如下对话框,表示注册成功。

当然,如果不想继续使用ActiveX版的CChart了,可以进行反注册。

Regsvr32 /u PlotCom.dll

这时会弹出如下对话框,表示反注册成功。

A25.2 VC调用

第一步,用VC建立一个基于对话框的MFC程序LessonA25,一路采用默认选项。

第二步,在VC资源管理器中打开主对话框,删除上面的标签。点开右键菜单“Insert ActiveX Control…”。在对话框里找到PlotCtrl Class,然后点击OK。

第三步,在主对话框里,调整控件大小和位置。

第四步,右键点击控件,选择“ClassWizard…”,在MFC ClassWizard对话框里进入Member Variables选项卡,选择IDC_PLOTCTRL1,然后点击“Add Variable…”按钮。

第五步,在弹出的对话框里点击“确定”、OK,取变量名为m_ctrlPlot。

这时候,项目里面会自动生成plotctrl.h和plotctrl.cpp两个文件。

在plotctrl.h文件里面,可以找到目前在PlotCom控件里面,已经加入的接口函数。

这些函数基本就等同于CChart类的成员函数,当然目前还只是CChart类成员函数的一小部分,有待继续扩充。

一些函数和CChart类的成员函数同名,参数也相同。另一些函数名的末尾添加了_S,这些函数的参数都是变体量VARIANT。

一般情况下,直接用不带_S的函数就可以了。带_S的函数主要是用于那些弱类型的语言,如VBScript等,这里就不展开说了。

第六步,打开LessonA24Dlg.cpp文件,在OnInitDialog()函数里面,找到“// TODO: Add extra initialization here”这一行,在其下面添加代码。

m_ctrlPlot.SetType(6);
m_ctrlPlot.SetFieldFcn((long)&FieldFcn);
m_ctrlPlot.SetPlotRange(-2, 2, -2, 2);
m_ctrlPlot.SetTitle(_T("ActiveX控件"));

注意到等高线云图的代号是6,这个需要到Chart.h中查询。

还要注意,ActiveX控件版中,SetFieldFcn的输入参数是long型的,但这里实际需要输入的是一个函数指针。

第七步,在OnInitDialog()之前,添加场函数的定义。

double FieldFcn(double x, double y)
{
	return 1.0/((x-1.5)*(x-1.5)+(y-0.8)*(y-0.8)+1.0)
		+1.0/((x+1.5)*(x+1.5)+(y-0.8)*(y-0.8)+1.0)
		+1.0/(x*x+(y+0.8)*(y+0.8)+1.0);
}

好了,打完收工,效果如图。

这里,笨笨是在VC6下演示的。实际上,在高版本下的使用方法没有本质区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值