急救!!!高手请入 在VC环境中调用Teechart控件实现数据曲线分析

要源代码和结果图... 要源代码 和结果图 展开
 我来答
hongyunqiankun
2010-12-19 · TA获得超过211个赞
知道答主
回答量:156
采纳率:0%
帮助的人:95.1万
展开全部
首先启动VC建立一个基于对话框程序的工程(如果建立SDI工程也可以,不过要对控件进行动态创建等工作实在太麻烦了),然后Insert ActiveX Controls->选择TeeChart控件加入到工程中间.然后通过classWizard定义控件变量.这时编译器会自动加载一系列的控件相 关的类到程序中间来.! G# c+ h& e& [0 c6 ]
然后打开曲线配置属性,在Series属性页加入两条fastline曲线(见下图)" a, o* _, Q. ]7 ~" e% t! P
[attach]55485[/attach]; o$ E7 ~4 D! b# ]" C( f
0 r2 H. K! k: i6 r+ R* D
7 e/ F. t; Z1 i: V

' H7 t+ u+ x- ?, x1 i# y定位到Tools属性页,加入一些相关的Tools(见下图)
: t( U# y3 L' c4 ^3 c8 E6 ?7 Z [attach]55486[/attach]
: ?; s! G8 V! I" A2 {3 R# b+ y. p+ l3 u/ l
6 m- G; O8 c o8 Y, ?

* N b' D2 B- P1 v, S准备工作完成了,我们现在开始编写加入程序数据方法编程了,这里采用加入随机数的方法(0-300的随机数)
7 [- _6 H6 l1 D0 Y#define GetRandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min))
# Y6 F9 z* X0 i& u' y% \
& Y/ ^5 p% m# b- r这里在初始化曲线的时候就采用控件的AddXY接口加入了1440个点的随机数,这里采用的条件为历史为一天,且当天一分钟保存一个历史点信息,全天的历史点为(60*24 = 1440),我们可以在调用的时候根据调用的时间间隔长短进行动态的修改% e2 r6 K/ |1 Y
void CTestTeeChartDlg::InitChart(). V: `/ l2 F2 m: B
{
3 m: }& F) _: ~9 o( W m_ctrlChart.Series(0).Clear();* y' v& z. h! e7 Y3 i' ?3 g- c1 y
m_ctrlChart.Series(1).Clear();
6 ~3 g+ `$ a' A m_ctrlChart.GetPage().SetMaxPointsPerPage(1440);
: t ]4 ~1 d* P9 B) k1 L8 o3 m+ }3 ?) @/ t
COleDateTime CurTime = COleDateTime::GetCurrentTime();
$ [% D% [ G6 _' T: m* { COleDateTime tempTime ;- @ ?% Q" l* G w) q6 S! v+ Y
tempTime = CurTime; % L. n3 }+ F1 K) Z3 q
3 P& |0 d7 E0 h5 |# g g) r. j
CurTime.SetTime(0,0,0);7 i: }* M! d- w+ x) m9 v" }
CurTime.SetDate(tempTime.GetYear(),tempTime.GetMonth(),tempTime.GetDay());" y( B/ B% B8 X- l
COleDateTimeSpan tmSpan = COleDateTimeSpan(0,0,1,0);
) N% ?4 z8 M8 q9 C# \ CString csTime ;) \" _5 p/ C" T# y2 l) x9 H; k* `: B, E
for(int i=0; i至 此,编译运行就可以看到我们的曲线了.但是曲线在运行的时候我们虽然能够看到曲线的信息,但是如果我们鼠标在曲线上面移动的时候不能动态显示鼠标当前位置 的数据值,由于我们在Tools中加入了Annotation工具,在这里我们OnMouseMoveTchartPlan消息来实现鼠标移动的时候数据 变化的显示.
! D( r( {6 ~- w) g. t. Q0 U4 p我们在H中加入定义:
; |5 x. U2 W% }void OnMouseMoveTchartPlan(long Shift, long X, long Y); / [* f$ `' |9 G5 x t
DECLARE_EVENTSINK_MAP()& W7 |+ F4 D, E& H! V. {2 A0 B
在实现中加入:% O% E' q, O, N- G
BEGIN_EVENTSINK_MAP(CTestTeeChartDlg, CDialog)
7 S# G& ^$ ]2 i9 J ON_EVENT(CTestTeeChartDlg, IDC_TCHART1, 20, OnMouseMoveTchartPlan, VTS_I4 VTS_I4 VTS_I4)! C+ K1 Z% {5 A8 q# o) ^4 M
END_EVENTSINK_MAP()
y! g. D% u# Z2 i3 j$ B& [# T# p# |: v. V/ o2 [0 e* R9 J3 L/ m
实现体:' W9 F- O0 q( v/ I
void CTestTeeChartDlg::OnMouseMoveTchartPlan(long Shift, long X, long Y)) I- t ?5 I: }$ V
{ ' k! _+ B( c/ o F7 G% y C5 R' R
int nP = -1;
! L0 V: s' W: ?2 t9 r M, p+ G$ o double xValue = m_ctrlChart.Series(0).XScreenToValue(X) + 0.5;" @4 N2 \: [3 x [
nP = (int)(xValue);
# q0 J" O! j' n; b if(nP 时间: %s 功率(P): %4.2f kW 功率(Q): %4.2f kW",csLabel, xFacY, xPlanY);8 ?- y7 {6 O# ]' g
ant.SetText(stmep); 3 J/ }& K* \5 u- W
}" H- ^) x&
百度网友d1148b6
2010-12-17 · TA获得超过1419个赞
知道小有建树答主
回答量:909
采纳率:62%
帮助的人:444万
展开全部
不懂
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liufeifei148
2010-12-17
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
最好的办法是直接问老师,不懂还可以交流!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式