关于MFC下TeeChart的使用
下载注册teechart5.ocx
teechart5.ocx 文件可以访问
链接:https://pan.baidu.com/s/1jr3AcovK0bjWwZjuAEiYVg
提取码:waly
获取
注册过程
管理员身份运行 teechart5activex.exe , 在安装目录找到 TeeChart5.ocx 文件
以管理员身份运行命令提示符 ,注册命令 regsvr32 ocx文件路径,例如我的安装路径是 C:\Windows\SysWOW64\TeeChart5.ocx
regsvr32 C:\Windows\SysWOW64\TeeChart5.ocx
新建MFC工程,基于对话框,其他默认
添加Teechart控件
在资源视图打开对话框,如果资源视图未找到,可以在工具栏中找到视图->其他窗口->资源视图 打开
右击对话框->插入 ActiveX 控件
找到Teechart Pro ActiveX control v5 ,点击确定、
为控件添加变量
然后右击teechart控件,添加变量
现在运行可能会报错
找到报错的地方注释掉就行
然后还需要添加teechart其他相关的类,右击对话框,选择类向导
为控件添加相关类
右击添加类的三角,选中类型中的MFC类
添加两个类 ISeries 和 ITChart 两个接口生成的类
在创建的 工程名Dlg.h 文件内 添加 #include “CSeries.h”
接下来在 对应cpp 文件内 添加绘制折线的代码,在对话框添加一个按钮,双击按钮添加响应时间。里面加入如下代码:
// TODO: 在此添加控件通知处理程序代码
CSeries data1;
data1 = (CSeries)m_Teechart.Series(0);
int count_line = 0;
//在画线之前把图形清除一下,否则会覆盖,清除可用CSeries的函数Clear();
//但是当添加多个Series后要对所有Series都clear,这是很蛋疼的,
//因为你有时都不知道有多少个Series,这样可以先获得Series的总数在clear代码如下
count_line = m_Teechart.get_SeriesCount();
for (long i = 0; i < count_line; i++)
{
((CSeries)m_Teechart.Series(0)).Clear();
}
int max;
max = RAND_MAX;//rand()函数随机数的最大值
int randnum;
for (int j = 0; j < 1000; j++)
{
randnum = (int)(rand()*(100 - 10) / max + 10);
data1.AddXY((double)j, randnum, NULL, NULL);
}
运行出错 E0135 class “CTChart1” 没有成员 “Series”
解决方法,打开COCX.h 文件, 加入如下代码
#import "C:\\WINDOWS\\SysWow64\\Teechart5.ocx" no_namespace
class CTChart1 : public CWnd
{
public:
CTChart1() {} // 调用 COleDispatchDriver 默认构造函数
// 特性
public:
// 操作
public:
// ITChart 方法
public:
LPDISPATCH get_Aspect()
{
LPDISPATCH result;
InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_Axis()
{
LPDISPATCH result;
InvokeHelper(0x2, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_Canvas()
{
LPDISPATCH result;
InvokeHelper(0x3, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
BOOL get_ClipPoints()
{
BOOL result;
InvokeHelper(0x4, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, nullptr);
return result;
}
void put_ClipPoints(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL;
InvokeHelper(0x4, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
short get_Cursor()
{
short result;
InvokeHelper(0x5, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, nullptr);
return result;
}
void put_Cursor(short newValue)
{
static BYTE parms[] = VTS_I2;
InvokeHelper(0x5, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
short get_DragCursor()
{
short result;
InvokeHelper(0x6, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, nullptr);
return result;
}
void put_DragCursor(short newValue)
{
static BYTE parms[] = VTS_I2;
InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
long get_DragMode()
{
long result;
InvokeHelper(0x7, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
void put_DragMode(long newValue)
{
static BYTE parms[] = VTS_I4;
InvokeHelper(0x7, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
BOOL get_Enabled()
{
BOOL result;
InvokeHelper(0x8, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, nullptr);
return result;
}
void put_Enabled(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL;
InvokeHelper(0x8, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
LPDISPATCH get_Export()
{
LPDISPATCH result;
InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_Footer()
{
LPDISPATCH result;
InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_Frame()
{
LPDISPATCH result;
InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_Header()
{
LPDISPATCH result;
InvokeHelper(0x16, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
long get_Height()
{
long result;
InvokeHelper(0xc, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
void put_Height(long newValue)
{
static BYTE parms[] = VTS_I4;
InvokeHelper(0xc, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
LPDISPATCH get_Import()
{
LPDISPATCH result;
InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
long get_Left()
{
long result;
InvokeHelper(0xe, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
void put_Left(long newValue)
{
static BYTE parms[] = VTS_I4;
InvokeHelper(0xe, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
LPDISPATCH get_Legend()
{
LPDISPATCH result;
InvokeHelper(0xf, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_Page()
{
LPDISPATCH result;
InvokeHelper(0x10, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_Panel()
{
LPDISPATCH result;
InvokeHelper(0x11, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_Printer()
{
LPDISPATCH result;
InvokeHelper(0x12, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_Scroll()
{
LPDISPATCH result;
InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_aSeries(long SeriesIndex)
{
LPDISPATCH result;
static BYTE parms[] = VTS_I4;
InvokeHelper(0x14, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, parms, SeriesIndex);
return result;
}
long get_SeriesCount()
{
long result;
InvokeHelper(0x15, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
long get_Top()
{
long result;
InvokeHelper(0x17, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
void put_Top(long newValue)
{
static BYTE parms[] = VTS_I4;
InvokeHelper(0x17, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
BOOL get_Visible()
{
BOOL result;
InvokeHelper(0x18, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, nullptr);
return result;
}
void put_Visible(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL;
InvokeHelper(0x18, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
LPDISPATCH get_Walls()
{
LPDISPATCH result;
InvokeHelper(0x19, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
long get_Width()
{
long result;
InvokeHelper(0x1a, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
void put_Width(long newValue)
{
static BYTE parms[] = VTS_I4;
InvokeHelper(0x1a, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
LPDISPATCH get_Zoom()
{
LPDISPATCH result;
InvokeHelper(0x1b, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
void AboutBox()
{
InvokeHelper(DISPID_ABOUTBOX, DISPATCH_METHOD, VT_EMPTY, nullptr, nullptr);
}
long AddSeries(long SeriesClass)
{
long result;
static BYTE parms[] = VTS_I4;
InvokeHelper(0x1c, DISPATCH_METHOD, VT_I4, (void*)&result, parms, SeriesClass);
return result;
}
void ChangeSeriesType(long SeriesIndex, long NewSeriesType)
{
static BYTE parms[] = VTS_I4 VTS_I4;
InvokeHelper(0x1d, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, SeriesIndex, NewSeriesType);
}
long CloneSeries(long SourceSeriesIndex)
{
long result;
static BYTE parms[] = VTS_I4;
InvokeHelper(0x1e, DISPATCH_METHOD, VT_I4, (void*)&result, parms, SourceSeriesIndex);
return result;
}
void Draw(long DC, long Left, long Top, long Right, long Bottom)
{
static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4;
InvokeHelper(0x1f, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, DC, Left, Top, Right, Bottom);
}
void ExchangeSeries(long Series1, long Series2)
{
static BYTE parms[] = VTS_I4 VTS_I4;
InvokeHelper(0x20, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, Series1, Series2);
}
double GetDateTimeStep(long DateTimeStep)
{
double result;
static BYTE parms[] = VTS_I4;
InvokeHelper(0x21, DISPATCH_METHOD, VT_R8, (void*)&result, parms, DateTimeStep);
return result;
}
unsigned long GetFreeSeriesColor(BOOL CheckBackgroundColor)
{
unsigned long result;
static BYTE parms[] = VTS_BOOL;
InvokeHelper(0x22, DISPATCH_METHOD, VT_UI4, (void*)&result, parms, CheckBackgroundColor);
return result;
}
LPDISPATCH GetLabelsSeries(long DestAxis)
{
LPDISPATCH result;
static BYTE parms[] = VTS_I4;
InvokeHelper(0x23, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, DestAxis);
return result;
}
BOOL IsFreeSeriesColor(unsigned long AColor, BOOL CheckBackgroundColor)
{
BOOL result;
static BYTE parms[] = VTS_UI4 VTS_BOOL;
InvokeHelper(0x24, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, AColor, CheckBackgroundColor);
return result;
}
void RemoveAllSeries()
{
InvokeHelper(0x25, DISPATCH_METHOD, VT_EMPTY, nullptr, nullptr);
}
void RemoveSeries(long SeriesIndex)
{
static BYTE parms[] = VTS_I4;
InvokeHelper(0x26, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, SeriesIndex);
}
void Repaint()
{
InvokeHelper(0x27, DISPATCH_METHOD, VT_EMPTY, nullptr, nullptr);
}
CString SeriesTitleLegend(long ASeriesIndex)
{
CString result;
static BYTE parms[] = VTS_I4;
InvokeHelper(0x28, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, ASeriesIndex);
return result;
}
void ShowEditor(long SeriesIndex)
{
static BYTE parms[] = VTS_I4;
InvokeHelper(0x29, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, SeriesIndex);
}
void StopMouse()
{
InvokeHelper(0x2a, DISPATCH_METHOD, VT_EMPTY, nullptr, nullptr);
}
BOOL get_TimerEnabled()
{
BOOL result;
InvokeHelper(0x2b, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, nullptr);
return result;
}
void put_TimerEnabled(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL;
InvokeHelper(0x2b, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
long get_TimerInterval()
{
long result;
InvokeHelper(0x2c, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
void put_TimerInterval(long newValue)
{
static BYTE parms[] = VTS_I4;
InvokeHelper(0x2c, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
BOOL get_AutoRepaint()
{
BOOL result;
InvokeHelper(0x2d, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, nullptr);
return result;
}
void put_AutoRepaint(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL;
InvokeHelper(0x2d, DISPATCH_PROPERTYPUT, VT_EMPTY, nullptr, parms, newValue);
}
void EditOneSeries(long SeriesIndex)
{
static BYTE parms[] = VTS_I4;
InvokeHelper(0x2e, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, SeriesIndex);
}
LPDISPATCH get_Environment()
{
LPDISPATCH result;
InvokeHelper(0x2f, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
long get_ChartLink()
{
long result;
InvokeHelper(0x30, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_MousePosition()
{
LPDISPATCH result;
InvokeHelper(0x31, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
void ChartRect(long Left, long Top, long Right, long Bottom)
{
static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4;
InvokeHelper(0x32, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, Left, Top, Right, Bottom);
}
LPDISPATCH get_Tools()
{
LPDISPATCH result;
InvokeHelper(0x33, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_SubHeader()
{
LPDISPATCH result;
InvokeHelper(0x34, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
LPDISPATCH get_SubFooter()
{
LPDISPATCH result;
InvokeHelper(0x35, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, nullptr);
return result;
}
void ClearChart()
{
InvokeHelper(0x37, DISPATCH_METHOD, VT_EMPTY, nullptr, nullptr);
}
void RefreshData()
{
InvokeHelper(0x36, DISPATCH_METHOD, VT_EMPTY, nullptr, nullptr);
}
LPDISPATCH Series(long SeriesIndex)
{
LPDISPATCH result;
static BYTE parms[] = VTS_I4;
InvokeHelper(0x38, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, SeriesIndex);
return result;
}
// ITChart 属性
public:
};
在 COCX.h 文件注释以下代码
//IMPLEMENT_DYNCREATE(CTChart, CWnd)
然后开始运行,会报错
为控件添加绘图类型
原因是没有给控件定义绘图类型
找到对话框,双击teechart控件,点击add,去掉3D,选择Line图
再次运行,点击按钮,终于出来了,每次点击按钮都会更新数据
程序源码大家可以找一下我的上传资源,免费的!!
王小洁���: 控件变量的类型怎么不识别
doublemark: vs2022不能用,好像teechart activeX必须高于2010版才可以
涛声依旧1992: 您好,在哪里找到的COCX.h 文件?
苏北的猪: 我的工程中也是出现teechart不能正常显示
purpledemon: 感谢分享