# ST_Curve
专业的曲线、折线、柱状图绘制控件（ActiveX），高效灵活，可深度定制，支持插件开发。

## 一：什么是ST_Curve？
ST_Curve是一个专业的曲线绘制控件，只要是xy坐标系的曲线，都可绘制，纵坐标只能显示为值，横坐标可以显示为值或者时间（如果你愿意为控件提供插件，则坐标可显示任意字符）。

## 二：ST_Curve面向对象？
二次开发者，即你必须要对ST_Curve进行开发，它才能使用，就像现在流行的诸多界面库一样。

## 三：ST_Curve有什么使用与分发限制？
使用无任何限制，分发时，必须保证控件的完整性，包括但不限于主控件、开发文档等。

## 四：ST_Curve的特点与优势（对用户）
鼠标任意拖动曲线，任意缩放曲线，定点（鼠标取点或者二次开发者传入点）缩放曲线，支持类似K线图的缩放方式，数字键快速找到曲线，F5键居中曲线，F4键显示隐藏帮助（帮助显示于背景图之上，帮助上会有更多的快捷键，这里不一一列出了），支持方向键，翻页键等，可显示三维效果，可显示全局位置预览窗口并通过它快速移动曲线。

## 五：ST_Curve的特点与优势（对开发者，只说说几个重点，其它的请看开发文档）
自定义各种颜色，字体，背景，画笔，填充模式等，可切换坐标原点到窗口四个角的任意一个，可导出图片（bmp、png、jpg、gif），可批量导出图片，以及定时导出图片，可导入图片作为背景或者用于填充曲线，可导出曲线到文件（支持二进制文件，它速度最快，还支持文本文件，它的好处是可以手动编辑，支持的文本格式包括：ansi、unicode、unicode big endian、utf8，这些文本格式都被windows支持），可绘制实时曲线（曲线自动滚动），支持在各个方向上对曲线进行填充，支持打印，打印或者导出图片时，可指定只对某一条曲线，或某一段数据；支持注解显示；支持数据持久化；支持批量添加数据。

## 六：开发举例
下面我简单讲一下控件的开发流程，以帮助大家迅速的看到效果，更详细的开发需要你仔细的阅读开发文档。 首先是调用AddLegendHelper函数添加图例，然后调用AddMainData函数添加曲线点（这两步的先后关系无所谓），比如：</br>
m_ST_Curve.AddLegendHelper(1, _T("第一条曲线"), (unsigned long) RGB(255, 255, 0), PS_SOLID, 1, FALSE);</br>
COleDateTime Time = COleDateTime::GetCurrentTime();</br>
for (int i = 0; i < 5; i++)</br>
{</br>
  m_ST_Curve.AddMainData2(1, Time, 90 + .6f * i, 0, 0, TRUE);</br>
  Time += 1.0 / 24 / 2;</br>
}</br>
至此，如果你可以看到曲线，那么ST_Curve控件就是我写的，如果看不到，我也不知道是谁写的！

考虑到初学者老是问如何用COleDateTime和COleDateTimeSpan表达浮点数，我这里给一个统一的解释：</br>
COleDateTimeSpan代表一个时间间隔，它是用浮点数来表达的，所以他们可以隐式转换（COleDateTimeSpan重载了operator double），表达的方式是1.0代表一天，其它时间间隔以此类推，比如：</br>
1小时 = 1.0 / 24</br>
1分钟 = 1.0 / 24 / 60</br>
1秒钟 = 1.0 / 24 / 60 / 60</br>
0.5秒钟 = 1秒钟的二分之一</br>
……</br>
COleDateTime代表一个日期，从1899.12.30开始，即1899.12.30等于0，如果是1899.12.31呢，当然就加一天，而一天刚才说过了，等于1.0，所以1899.12.31就是1.0。
可以直接将double数据赋给COleDateTimeSpan或者COleDateTime，可隐式转换。

## 七：编译
本控件需要Lua，自带5.3.4版本的lib文件，vc++ 15.7.0编译，如果你的编译器不是15.7.0版本，需要自行从 https://www.lua.org/ 下载并编译，打开解决方案之后，如果提示Windows SDK版本不正确，请自行切换到你自己的版本（我的环境下是 Windows SDK 10.0.17134.0），如果想在低于vc++ 15.7.0版本下编译，请创建一个MFC ActiveX工程，然后将代码拷贝过去。

## 八：进一步说明
本控件是10多年前我刚参加工作时开始写的，鉴于当时的水平，在组织框架上，可读性上都有很大的不足，仅仅是考虑了效率优先（当时的机器配置也有限），还请大家见谅。这么多年过去，我只能说其稳定性还是很不错，功能也足够强大，如果你要修改它，最好先读懂它。

## 九：联系我
QQ群：132339384，支持定制服务。
