High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件
介绍
对于我之前的一个项目,我需要在图表控件上显示连续的数据流。 我决定开发自己的控件,因为我找不到任何可以提供所需灵活性的自由软件控件。 其中一个主要的限制是,控件必须绘制大量的数据,并能够迅速显示它(在Pocket PC上)。 控件能够通过仅绘制新的数据点而不是完整的数据序列来做到这一点并且图表还能够显示静态数据。 这种控件是我长时间工作的结果,而且费尽周折地为了提供足够的灵活性来供需要它的人使用。 对于使用者反馈我表示由衷的感谢:一个邮件,留言板中的一一句话或只是对本文评级。 当我不知道是否还有人使用它时,我就没有必要维护这个控件了。
免责声明
这个控件是我花费很长时间的开发的结果,因此我对代码的使用放置一些小条件:
该代码可以以编译的形式用于任何非商业和商业目的。代码可以被重新开发,只要它提供作者名字和完整的免责声明。 更改源代码需要得到作者的同意。
此代码不提供任何安全保证。 我不会对使用此代码造成的损失负责。 使用它需要自己承担风险。
This code may be used for any non-commercial and commercial purposes in a compiled form.
The code may be redistributed as long as it remains unmodified and providing that the author name and the disclaimer remain intact. The sources can be modified with the author consent only.
This code is provided without any guarantees. I cannot be held responsible for the damage or the loss of time it causes. Use it at your own risks.
鉴于开发这个控件所付出的努力,下面的要求并不过分: 如果你在在商业应用程序中使用这个控件,那么请给我发邮件让我知道。
主要特点
控件的主要特点是:
高速绘图(轴固定时),允许快速绘制数据 无限数量的数据序列(内存是限制) 每个数据序列的数据量不受限制
支持线图,点图,平面图,柱状图,K线图 和甘特图系列 最多四个轴(左,下,右和上轴) 标准轴,对数轴或日期/时间轴
自动伸缩的坐标轴, 翻转的坐标轴(相互独立) 轴标签 点标签 平滑的曲线 网格
图例和标题
交互性(在控件中发生特定事件时的通知) 支持手动缩放和鼠标平移 支持鼠标指针 支持轴上的滚动条
高度可定制(颜色,标题,标签,边缘,字体等) 支持UNICODE
支持打印和保存到图像文件 文档结构
本文通过一系列简短的教程来涵盖控件的大部分功能。 阅读本文后,您将能够快速地在自己的应用程序中使用本控件。
我决定从文章中删除所有的类和函数的文档,因为它不是非常友好并且我很难维护。 此外,随着代码的增长,要记录的类和函数的列表变得过于广泛以至于不能将所有内容放在文章中。 作为替代,我提供了一个doxygen文档,您可以从本文中(文章的开头)下载:只需下载“Doxygen文档”zip文件,解压所有文件,双击“Index.html”文件,进行查看。
入门学习
此图表控件允许您在屏幕上绘制一系列数据。 此控件可以添加几个不同类型数据序列并且最多可以使用四个轴。 添加到图表的数据序列与一个水平轴(底部或顶部)和一个垂直轴(右侧或左侧)相关联。 这两个轴控制数据序列在图表上的显示方式。
为了能够在应用程序中使用次图表控件,您首先需要在自己的工程里添加源代码zip中包含的文件。
注意:控件在内部使用动态转型,因此必须启用RTTI(RunTime Type Information 运行时自动类型识别的机制),否则可能会发生崩溃。 默认情况下,VC6没有启用RTTI,因此要启用它打开项目设置 - >“C / C ++”选项卡 - >“C ++语言”类别,并确保“Enable Run-Time Type Information (RTTI) “选项已选中。
在应用程序中使用图表控件有两种方法:手动插入,或通过资源编辑器插入。
手动插入
1.#include \添加在对话框(Dialog)类的头文件中 2.在对话框类中添加变量CChartCtrl:
//{{AFX_DATA(CChartDemoDlg) //}}AFX_DATA
CChartCtrl m_ChartCtrl;
3.在对话框类的OnInitDialog方法中添加这个控件的Create方法。
使用资源管理器
1.向对话框资源添加自定义控件,打开控件的属性,并为Class属性指定ChartCtrl。 为了避免滚动条上的闪烁,必须设置WS_CLIPCHILDREN样式(0x02000000L),如图所示。
2.#include \添加在对话框(Dialog)类的头文件中
3.在对话框类中添加变量CChartCtrl:
//{{AFX_DATA(CChartDemoDlg) //}}AFX_DATA
CChartCtrl m_ChartCtrl;
4.在DoDataExchange函数中添加DDX_Control(不要忘了更改ID号和控件名字):
Add a variable of type CChartCtrl in your dialog class: Hide Copy Code
//{{AFX_DATA(CChartDemoDlg) //}}AFX_DATA
操作数据序列
几种类型的数据序列可以添加到控制:点序列,线序列,曲面序列,柱状图序列,K线图序列或甘特图序列。 点的数据格式可能因序列而异(例如,K线图和甘特图系列使用不同的点格式)。
一旦你选择了一种系列,你可以通过调用上表中列出的CChartCtrl类的辅助函数之一将其添加到图表中。 这些函数接受两个可选参数:两个布尔值来确定描述该系列是连接到副水平轴(顶轴)或者是连接大副垂直轴(右轴)。 如果未指定参数,则数据系列将附加到主水平轴(底部轴)和主垂直轴(左轴)。
警告: 在将任何系列添加到图表之前,您需要创建该系列所连接的两个轴。 如果不这样做,将导致控件失效(assert)。 有关详细信息,请参见“操纵轴”一节。
一旦将系列添加到图表后,我们就可以使用数据填充该图表。 有两种方法:将数据放到一个单元中一起添加,或者逐点添加。 后者用于有动态数据时:每次调用函数时都会更新图表。 虽然这个调用是快速的(在某些特定条件下),但是最好尽可能地将数据放到一个单元中。 下面是一个简单代码示例,它在图表中创建两个系列,并用数据填充它们:一个系列在初始化时完全填充,另一个系列在调用OnDataReceived函数(仅存在于此示例的目
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形在线全文阅读。
相关推荐: