README.md

    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函数添加曲线点(这两步的先后关系无所谓),比如: m_ST_Curve.AddLegendHelper(1, _T("第一条曲线"), (unsigned long) RGB(255, 255, 0), PS_SOLID, 1, FALSE); COleDateTime Time = COleDateTime::GetCurrentTime(); for (int i = 0; i < 5; i++) { m_ST_Curve.AddMainData2(1, Time, 90 + .6f * i, 0, 0, TRUE); Time += 1.0 / 24 / 2; } 至此,如果你可以看到曲线,那么ST_Curve控件就是我写的,如果看不到,我也不知道是谁写的!

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

    七:编译

    本控件需要Lua,自带5.4.3版本的lib文件,vc++ 2019 (16.11.3) 编译,如果你的编译器不是这个版本,需要自行从 https://www.lua.org/ 下载并编译,打开解决方案之后,如果提示Windows SDK版本不正确,请自行切换到你自己的版本,如果想在低于vc++ 2019 (16.11.3) 版本下编译,请创建一个MFC ActiveX工程,然后将代码拷贝过去。

    八:进一步说明

    本控件是在2004年左右我刚参加工作的时候开始编写的,鉴于当时的水平,在组织框架上,可读性上都有很大的不足,仅仅是考虑了效率优先(当时的机器配置也有限),且随着编译器的升级,出来了一些编译警告,但不影响功能所以我一直没有修正,还请大家见谅。这么多年过去,我只能说其稳定性还是很不错,功能也足够强大,可傻瓜式使用也可尝试定制,如果你要修改它,最好先读懂它。

    九:联系我

    QQ群:132339384,支持定制服务。

    十:FAQ

    相较于其它类似控制的最突出优势: 效率和深度定制。 最常见问题: 在工作线程里面调用控件接口引起的多线程问题,因为几乎所有接口都需要调用窗口函数,windows规定窗口函数只能在主线程(GUI)里面调用,工作线程只能通过消息让主线程调用窗口函数。

    项目简介

    基于MFC ActiveX的工控曲线、折线、柱状图绘制控件。

    发行版本

    当前项目没有发行版本

    贡献者 1

    Y youngwolf @youngwolf

    开发语言

    • C++ 89.3 %
    • C 10.3 %
    • Lua 0.4 %