﻿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中可能看不到控件，具体请参看我的文章：http://blog.csdn.net/yang79tao/article/details/7705754
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两种，具体请参看开发文档。

版权：
完全免费但不开源，可自由传播，但必须保证其完整性。

联系我：
官网：www.st-curve.cn
邮箱：mail2tao@163.com
QQ群：132339384
电话：15520720170

捐助：
成都招行高新支行，6225 8812 8294 3181（大运会一卡通），杨利