README.md 4.0 KB
Newer Older
Y
youngwolf 已提交
1 2
# ST_Curve
专业的曲线、折线、柱状图绘制控件(ActiveX),高效灵活,可深度定制,支持插件开发。
Y
youngwolf 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

## 一:什么是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支持),可绘制实时曲线(曲线自动滚动),支持在各个方向上对曲线进行填充,支持打印,打印或者导出图片时,可指定只对某一条曲线,或某一段数据;支持注解显示;支持数据持久化;支持批量添加数据。

Y
youngwolf 已提交
19
## 六:开发举例
Y
youngwolf 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
下面我简单讲一下控件的开发流程,以帮助大家迅速的看到效果,更详细的开发需要你仔细的阅读开发文档。 首先是调用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,可隐式转换。
Y
youngwolf 已提交
39 40 41

## 七:联系我
QQ群:132339384,支持定制服务。
Y
youngwolf 已提交
42 43 44

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