ST_Curve是一个专业的折线、曲线绘制控件,它有几个特点:
一:它是个AcitveX,所以只能运行在windows平台,只要能用控件的地方,就能用;
二:它是个ActiveX,所以具有ActiveX的所有特点,比如需要注册等,此处省略若干字;
三:它几乎没有模型(比如说圆模型,提供圆点和直径,理论上就可以画出来,但ST_Curve不行),
所有的点都必须要提供,所以特别适合有现成数据的场合,比如工控行业数据采集;
四:它面向二次开发者,开发语言不限,只要能使用AcitveX即可;
五:它采用MFC开发,所以需要MFC运行库的支持;
六:虽然它只绘制折线、曲线,但由于支持填充,可以轻松的绘制柱状图。
目前提供的版本有(均为unicode版本,MFC库请用我提供的):
一:32位2000-xp,位于“2000-xp”文件夹,vc2003编译,依赖MFC71运行库;
二:32位xp_sp2-win7,位于“xp_sp2-win8\xp_sp2-win7”文件夹,vc2012编译,依赖MFC110运行库;
三:32位vista-win8,位于“xp_sp2-win8\vista-win8”文件夹,vc2012编译,依赖MFC110库;
四:64位xp_sp2-win7,位于“xp_sp2-win7”文件夹,vc2012编译,依赖MFC110运行库;
五:64位vista-win8,位于“vista-win8”文件夹,vc2012编译,依赖MFC110库;
六:上面二至五版本的double版本和英文版本;
七:其它不提供的版本请向我索取,如果有需要的话。
关于double版本的由来
控件中的坐标格式是([DATE, float],参看AddMainData2接口),这样的签名,在非vc开发环境中,将被映射为
时间类型,比如DateTime,那么当横坐标显示为数值的时候,其原始数据类型也往往是数值类型,此时怎么调用接口呢?
答案是将数值型数据转成double类型数据,再通过DateTime的FromOADate函数,得到一个DateTime对象,再调用接口。
在这个转换过程中,很明显有一个缺陷:时间对象的范围是double范围的一个子集,不是所有的double都能转换成
时间对象。这就是double版本的由来,我通过修改控件的idl文件,将坐标类型改为[double, float],这样就解决了
时间对象范围相对较小的问题(因为可以直接使用double类型数据了)。此时又带来另一个问题,如果我横坐标显示为
时间(其原始数据往往也应该是时间类型),如何使用double版本控件呢?答案是调用DateTime的ToOADate函数,得到
一个double值再调用接口。换句话说,时间版的控件能做的事,double版的都能做!那为什么还要保留时间版呢?因为
时间版更容易理解(在横坐标显示为时间的时候)。
vc开发的同仁们用时间版本,就能解决一切问题了,因为在vc中,坐标被映射为[DATE, float],而DATE就是double,
所以在vc下面,两个版本是完全一样的,区别仅仅是在字面上,[DATE, float] VS [double, float]实质上是完全一回事!
正是因为DATE和double的一致性,我的double版才是double版,而不是float版或者int版,我可以保证我的代码在两个
版本下面完全一样,只是idl文件不一样。
目录组织
32目录下面是所有32位版本,64目录下面是所有64版本;
32和64目录下的demo里面是示例源代码,32的工程是vc6,64的工程是vc2012,用vc6打开工程时,如果出现无法编译的情况,
则原因一般是因为没有安装unicode库的问题,解决办法有二:一是换到多字节版本编译,二是为vc6添加unicode库(修复安装)
32目录下的demo只能编译出32位例程,64目录下的demo可以编译出32位和64位例程。
使用64位控件时,会有一些问题(64位控件本身的问题,与ST_Curve无关),你仍然需要注册32位版本到开发机器上,否则在
vc中可能看不到控件,MFC71和MFC110是MFC运行库,当控件无法注册的时候,可能是缺少这些库。
depends是一个依赖检测工具,有32和64位两个版本,由微软开发的,当出现控件无法注册时,可以用它来看看缺少哪些库,
关于这个工具的使用,请网上搜索。
common目录中,ST_Curve.h是控件导出函数的申明(配合各个版本目录下的ST_Curve.lib,可实现静态加载),控件是有导出函数,
此时它就完全是一个普通dll了,具体请参看开发文档。ST_Curve_PlugIn.h是控件支持的插件的函数申明,要开发插件,必须按照
这里面的定义实现相应的函数。ST_Curve_PlugIn.lua是我写的一个简单使用Lua的例子,TestST_Curve2这个demo里面有使用(加载
时注意路径问题,demo里面采用的是相对路径)。插件分为dll和Lua两种,具体请参看开发文档。