High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形(3)
COleDateTime对象可以从不同的时间格式构造(检查COleDateTime类的MSDN文档,以了解从哪种格式可以构造它)。
填充数据后,可以配置轴以显示所需的内容。 与日期/时间轴相关的几个功能可用:
void SetDateTimeIncrement(TimeInterval Interval, int Multiplier)
void SetDateTimeFormat(bool bAutomatic, const TChartString& strFormat) void SetReferenceTick(COleDateTime referenceTick)
第一个允许您指定轴上显示的两个节拍之间的间隔。两个节拍之间的间隔将遵守正确的时间,这意味着如果指定1个月的节拍增量
(Interval=CChartAxis::tiMonth and Multiplier=1),则两个节拍之间的间隔将是不规则的(28,30或31天)。第二个函数允许您指定刻度标
签的格式。控件根据刻度间隔自动格式化刻度标签,但您可以通过调用此函数覆盖它。检查MSDN上的COleDateTime :: Format函数的文档以获
取更多信息。最后,SetReferenceTick(COleDateTime referenceTick)函数允许您为轴指定一个参考标记。参考标记是用作绘制标记的参考
的日期:在该日期总是存在标记。当您在SetDateTimeIncrement函数中指定的multiplier 不是1时,这很有用。例如,假设您指定了3个月的单
位增量,并且您希望在2月(因此,5月,8月,?)有一个单位,那么您可以调用此函数将2月1日设置为参考单位。默认设置为2000年1月1日。
下面是一个简单的代码片段,它创建一个日期/时间轴,并显示不同函数的用法:
void CMyClass::Init() {
// Sets the axis min value to January 1st 2006 and the axis // max value to December 31st 2007.
COleDateTime minValue(2006,1,1,0,0,0); COleDateTime maxValue(2007,12,31,0,0,0);
pBottomAxis->SetMinMax(CChartCtrl::DateToValue(minValue), CChartCtrl::DateToValue(maxValue));
// Sets the tick increment to 4 months (disable automatic tick increment) pBottomAxis->SetTickIncrement(false, CChartDateTimeAxis::tiMonth, 4); // Sets the tick label format for instance \
pBottomAxis->SetTickLabelFormat(false, _T(\}
自定义外观
控件的外观方面可以根据不同的应用场景做出更改,比如控件的不同部分(图例,标
题,背景,?)都可以修改。 所有与这些对象的交互是通过CChartCtrl类来实现:一些将根据需要创建(例如axes或series),一些在创建控件时创建(legend,titles,?)。 一般来说,你永远不会自己创建这些对象,而是将该任务委派给CChartCtrl类。 唯一的例外是当您要使用自定义轴或自定义系列(请参阅“扩展功能”部分)。 例如,下面是一个代码段,设置渐变背景,并将图例放在控件的底部:
void CMyClass::Init() {
// SNIP
// Disable the refresh of the control m_ChartCtrl.EnableRefresh(false); // Set the gradient for the background
m_ChartCtrl.SetBackGradient(RGB(255,255,255),RGB(125,125,255),gtVertical); // Dock the legend at the bottom
m_ChartCtrl.GetLegend()->DockLegend(CChartLegend::dsDockBottom); // Specifies that the legend entries are horizontally stacked m_ChartCtrl.GetLegend()->SetHorizontalMode(true); // Re-enable the refresh of the control m_ChartCtrl.EnableRefresh(true); }
重要:从版本1.4的控件,每次调用控件上的一个属性将导致控件的完全刷新(即使像改变一些文本的字体或对象的颜色)。 为了避免在没有必要时刷新控件(例如,当您同时更改多个属性时),应首先禁用刷新,更改属性,然后重新启用刷新,如上面的代码段所示 。
自从1.5版的控件开始支持UNICODE。 所有出现的std :: string对象已被TChartString对象替换,这只是一个typedef,如果未启用UNICODE,则解析为std :: string,并在启用UNICODE时解析为std :: wstring。
响应鼠标事件
有时,应用程序需要响应用户鼠标操作。 例如,如果用户点击点,则程序可以显示关于被点击的点的信息,这一节将解释如何做到。
虽然原理是有点不同,但是无论你想听在图表上的一般鼠标事件本身(点击轴,图例,?)或你是否对特定系列的鼠标事件感兴趣。 这两种情况都很容易实现。
响应图表上的鼠标事件
你必须实现CChartMouseListener接口,覆盖你感兴趣的方法,并通过调用CChartCtrl :: RegisterMouseListener(CChartMouseListener * pMouseListener)将该类的实例注册到图表控件。 根据鼠标事件发生在控件的哪个部分:标题,图例,轴或绘图区,调用该接口上的不同函数。 对于所有这些函数,总是传递两个参数:MouseEvent,它是列出鼠标事件类型(鼠标移动,左键单击,?)的枚举,以及一个CPoint对象,它包含的发生事件的点的屏幕坐
标。 对于某些函数,需要时传递一些其他参数。 例如,当单击一个轴时,指向该轴的指针被传递给该函数。
下面是CChartMouseListener的实现,它对轴的点击作出反应,并显示一个消息框:
class CCustomMouseListener : public CChartMouseListener {
public:
void OnMouseEventAxis(MouseEvent mouseEvent, CPoint point, CChartAxis* pAxisClicked) {
if (mouseEvent == CChartMouseListener::LButtonDoubleClick) {
MessageBox(_T(\ } } };
然后你必须创建一个这个类的实例并注册它:
m_pMouseListener = new CCustomMouseListener(); m_ChartCtrl.RegisterMouseListener(m_pMouseListener);
这里也需要自己删除指针。
响应系列上的鼠标事件
响应系列上的事件与响应一般事件非常相似,只是监听器是CChartSeriesMouseListener的一个实例,它是一个模板类,模板参数是系列的点类型。 这是需要的,以避免当您要检索点的特定值时不必要的转型。 另一个区别是,您必须在系列本身上注册监听器,而不是在图表控件上注册。
下面是CChartSeriesMouseListener的实现,它对系列的点击做出反应,如果点击发生在点上,它将显示一个带有点的Y值的消息框:
class CCustomMouseListener : public CChartSeriesMouseListener
public:
void OnMouseEventSeries(MouseEvent mouseEvent, CPoint point,
CChartSerieBase
if (mouseEvent == CChartMouseListener::LButtonDoubleClick && uPointIndex != INVALID_POINT) {
TChartStringStream ssText;
SChartXYPoint Point = pSeries->GetPoint(uPointIndex); ssText << _T(\ << Point.Y; TChartString strText = ssText.str();
MessageBox(NULL,strText.c_str(), _T(\ } } };
注意:当用户不点击一个点时,OnMouseEventSeries函数也可以被调用。 例如当用户在两个点之间但仍然在该系列上点击时情况。 …… 此处隐藏:3704字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [综合文档]应答器设备技术规范(征求意见稿)A1
- [综合文档]教师 2012年高考政治试题按考点分类汇
- [综合文档]保险公司的总经理助理竞职演说
- [综合文档]卫生应急大练兵大比武活动考试--题库(
- [综合文档]徐州经济技术开发区总体规划环境影响报
- [综合文档]汉语拼音表(带声调)
- [综合文档]二年级 上 思维训练( 1~18)
- [综合文档]特色学校五年发展规划
- [综合文档]机床经常出现报警“X1轴定位监控”
- [综合文档]《电子技术基础》21.§5—2、3、4 习题
- [综合文档]浙江省深化普通高中课程改革
- [综合文档]CRISP原理 - 图文
- [综合文档]2017年电大社会调查研究与方法形考答案
- [综合文档]浅析建筑施工安全毕业论文
- [综合文档]《回忆我的母亲》名师教案
- [综合文档]装饰装修工程监理规划
- [综合文档]三下乡心得体会-文艺
- [综合文档]柱计算长度系数 - 图文
- [综合文档]全流程思考,提高燃电系统热电转换率--
- [综合文档]2018年嘉定区中考物理一模含答案
- 433M车库门滚动码遥控器
- 8、架空线路施工规范
- 大学四年声乐学习的体会
- 新北师大版五年级数学上册《轴对称再认
- 部编版五年级上册语文第六单元小结复习
- 小学六年级英语形容词用法
- 第2课 抗美援朝保家卫国 课件01(岳麓版
- 2015年天津大学运筹学基础考研真题,考
- 微机计算机控制技术课后于海生(第2版)
- 安全教育实践活动
- Delphi程序设计教程_第1章_Delphi概述
- 第八讲 工业革命与启蒙运动
- 《中华人民共和国药典》2005年版二部勘
- 科粤版九年级化学2.3构成物质的微粒(1)
- 西师大版数学三年级下册《长方形、正方
- ch6_冒泡排序演示
- 第4章 冲裁模具设计
- 浙江中小民营企业员工流失论文[终稿]
- 再议有线数字电视市场营运模式
- 昆明供水工程监理大纲




