深入浅出CChart 每日一课——快乐高四第二十七课 百岁老猿,ActiveX控件昆仑山悬崖之VB番外篇

前面在VB里面画曲线,的确是非常简单。

那么,等高线图呢?

当然,如果是用控制点来画等高线,仍然是非常简单的。笨笨已经添加了需要用到的几个接口函数,大家用上一课的方法调用毫无问题。

如果是用场函数来画等高线,那就涉及到一个函数指针的问题了。VB6下使用函数指针,没有C++下面那么方便直接了,限制比较多。关于VB6的函数指针,可以找到几篇很长的文章,对此专门进行介绍。

但不管怎么说,VB6是支持函数指针的,AddressOf这个操作符,就是我们使用函数指针的屠龙宝刀。

另外,VB6下编写的函数,其调用约定都是_stdcall。CChart是用VC开发的,内部函数基本上都是使用默认的_cdecl约定,等高线图的场函数,也需要_cdecl约定的函数。

为此,笨笨专门在CChart中增加了输入_stdcall约定场函数的接口,这样VB6就方便了。

下面仍然用例子说话。

第一步,和上一课一样,建立一个标准EXE工程,添加PlotCom控件后,在主窗口上放置一个PlotCom控件,并调整窗口到合适大小。

第二步,选择菜单“工程”-->“添加模块”,在模块窗口中输入如下代码,并另存为Module1.bas文件。

Public Function Field(ByVal x As Double, ByVal y As Double) As Double
    Field = 1 / (x * x + y * y + 1)
End Function

这实际上就是用Basic写的场函数。

为什么要添加一个模块呢?这是由于VB规定,函数指针操作符AddressOf只能针对模块内的函数或者类模块的函数进行操作,不能操作窗体代码里的函数。

第三步,在Form1窗体的代码窗口内,添加如下代码。

Private Sub Form_Load()
    PlotCtrl1.ChartType = 6
    Call PlotCtrl1.SetFieldFcnStdCall_S(AddressOf Field)
    Call PlotCtrl1.SetPlotRange_S(-3, 3, -2, 2)
End Sub

这里SetFieldFcnStdCall_S就是最近专门为_stdcall约定的场函数添加的接口。_S后缀仍然表示此接口适用于弱类型语言。

代码已经写完了,得到的结果如图。

可以看到,这一课还是一如既往的简单。当然这么简单的原因是笨笨已经把大量的细节处理好了。世上那有什么岁月静好,只是有人替你负重前行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值