Teechart在VC++中使用的碎碎念

2023-05-16

今天再看官网推荐的Teechart的使用方式,感觉他们还是推荐使用VC++6.0的导出头文件格式,来引入所有的类,并操作teechart控件。
All the files necessary can be found under the New VC classes folder below the utilities folder; these files should be copied to your project folder (using Windows Explorer) and then should be added in to the project (in Solution Explorer -> right click over "Source Files" & "Header Files" folders -> Add Existing Item...).

长期使用teechart,2010年之前在Delphi使用,这几年使用的是VC++。有段时间自绘了曲线显示窗口,但是要处理的动作和效果实在是太多了,虽然可以自定义的东西很多,但是工作量实在是太大,现在已经是大龄程序员了,没有那么多的时间和精力去自己画了,只好重用teechart
VS使用上的困惑:有几个软件用的是VS2005及以上版本开发的,但是因为在这些编译器中teechart导出的函数接口有改动,导致编程效率底下,附上VS2005--VS2015的类库导入步骤:
添加相关类MFC Class From Typelib--->add class from registry---->available type libraries选中teechart pro activex control v8,后面会显示具体的注册路径。把接口interfaces IAxes I...之类的全部选中,导入到程序中,就可以使用了。

下面对比VS和VC++6.0的导出文件:

VS版本的导出文件:

// Machine generated IDispatch wrapper class(es) created with Add Class from Typelib Wizard

#import "C:\\Windows\\SysWow64\\TeeChart8.ocx" no_namespace
// CAxes wrapper class

class CAxes : public COleDispatchDriver
{
public:
    CAxes(){} // Calls COleDispatchDriver default constructor
    CAxes(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
    CAxes(const CAxes& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}

    // Attributes
public:

    // Operations
public:

    // IAxes methods
public:
    LPDISPATCH get_Left()
    {
        LPDISPATCH result;
        InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
        return result;
    }
    LPDISPATCH get_Right()
    {
        LPDISPATCH result;
        InvokeHelper(0x2, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
        return result;
    }
    LPDISPATCH get_Top()
    {
        LPDISPATCH result;
        InvokeHelper(0x3, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
        return result;
    }
    LPDISPATCH get_Bottom()
    {
        LPDISPATCH result;
        InvokeHelper(0x4, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
        return result;
    }
    BOOL get_Visible()
    {
        BOOL result;
        InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_Visible(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0xa, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    LPDISPATCH get_Depth()
    {
        LPDISPATCH result;
        InvokeHelper(0x5, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
        return result;
    }
    BOOL get_DrawAxesBeforeSeries()
    {
        BOOL result;
        InvokeHelper(0x6, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_DrawAxesBeforeSeries(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    long AddCustom(BOOL IsHorizontal)
    {
        long result;
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x7, DISPATCH_METHOD, VT_I4, (void*)&result, parms, IsHorizontal);
        return result;
    }
    LPDISPATCH get_Custom(long CustomAxisIndex)
    {
        LPDISPATCH result;
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0x8, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, parms, CustomAxisIndex);
        return result;
    }
    long get_CustomCount()
    {
        long result;
        InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
        return result;
    }
    void RemoveCustom(long CustomAxisIndex)
    {
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0xb, DISPATCH_METHOD, VT_EMPTY, NULL, parms, CustomAxisIndex);
    }
    void RemoveAllCustom()
    {
        InvokeHelper(0xc, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
    }
    LPDISPATCH get_DepthTop()
    {
        LPDISPATCH result;
        InvokeHelper(0xc9, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
        return result;
    }
    BOOL get_FastCalc()
    {
        BOOL result;
        InvokeHelper(0xca, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_FastCalc(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0xca, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }
    void SetIsometric(long aVertical, long aHorizontal)
    {
        static BYTE parms[] = VTS_I4 VTS_I4 ;
        InvokeHelper(0xcb, DISPATCH_METHOD, VT_EMPTY, NULL, parms, aVertical, aHorizontal);
    }
    void Hide()
    {
        InvokeHelper(0xcc, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
    }
    BOOL get_Behind()
    {
        BOOL result;
        InvokeHelper(0xcd, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    void put_Behind(BOOL newValue)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0xcd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    }

    // IAxes properties
public:

};

VC++6.0的的导出文件如下:

#if !defined(AFX_AXES_H__6F4A532C_9E89_4968_9E14_E83C63437874__INCLUDED_)
#define AFX_AXES_H__6F4A532C_9E89_4968_9E14_E83C63437874__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++

// NOTE: Do not modify the contents of this file.  If this class is regenerated by
//  Microsoft Visual C++, your modifications will be overwritten.

// Dispatch interfaces referenced by this interface
class CAxis;

/
// CAxes wrapper class

class CAxes : public COleDispatchDriver
{
public:
    CAxes() {}        // Calls COleDispatchDriver default constructor
    CAxes(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
    CAxes(const CAxes& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}

// Attributes
public:

// Operations
public:
    CAxis GetLeft();
    CAxis GetRight();
    CAxis GetTop();
    CAxis GetBottom();
    BOOL GetVisible();
    void SetVisible(BOOL bNewValue);
    CAxis GetDepth();
    BOOL GetDrawAxesBeforeSeries();
    void SetDrawAxesBeforeSeries(BOOL bNewValue);
    long AddCustom(BOOL IsHorizontal);
    CAxis GetCustom(long CustomAxisIndex);
    long GetCustomCount();
    void RemoveCustom(long CustomAxisIndex);
    void RemoveAllCustom();
    CAxis GetDepthTop();
    BOOL GetFastCalc();
    void SetFastCalc(BOOL bNewValue);
    void SetIsometric(long aVertical, long aHorizontal);
    void Hide();
    BOOL GetBehind();
    void SetBehind(BOOL bNewValue);
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_AXES_H__6F4A532C_9E89_4968_9E14_E83C63437874__INCLUDED_)

几大变化:

    VC++ 6.0 VS2005及更高版本
  头文件和源文件 axes.h axes.cpp axes.h  
  函数名称1 GetLeft() get_Left()  
  函数返回值1 CAxis LPDISPATCH  
  函数名称2 SetBehind(BOOL bNewValue) put_Behind(BOOL newValue)  
  函数返回值2 void void  

语句的不同

    VC++ 6.0 VS2005及更高版本
  语句1 `mChart.GetAxis().GetLeft().SetVisible(FALSE); ((CAxis)((CAxes)mChart.get_Axis()).get_Left()).put_Visible(FALSE);`  
  语句2 CAxes ChartAxis = mChart.GetAxis(); CAxis asLeft = ChartAxis.GetLeft(); asLeft.SetVisible(FALSE); CAxes ChartAxis = mChart.get_Axis(); CAxis asLeft = ChartAxis.get_Left(); asLeft.put_Visible(FALSE);  

使用高版本的VS导出的头文件使用过程比较繁琐,尤其是返回值,需要查询具体的类型。
官网推荐还是使用VC++6.0的版本,并且附上了一个文件夹,可以直接使用New VC Classes具体的使用过程还是查询Tutorial 15 - MS VC++ Applications

官方文档中几个有用的例子:

标题的更改

#include "Titles.h"
#include "Strings.h"

COleVariant var1(CString ("ACME Monthly Sales"));
COleVariant var2(CString ("Year: 2014"));
CTitles hd = m_Chart.GetHeader();
hd.GetText().Clear();
hd.GetText().Add(*(LPCVARIANT)var1);
hd.GetText().Add(*(LPCVARIANT)var2);

//if items (header lines) already in list (+ alternative COleVariant declare syntax)

m_Chart1.GetHeader().GetText().SetItem(0, COleVariant("ACME Monthly Sales"));
m_Chart1.GetHeader().GetText().SetItem(1, COleVariant("Year: 2014"));

Canvas绘图

#include "Canvas.h"

m_Chart1.GetCanvas().MoveTo(0,0);
m_Chart1.GetCanvas().LineTo(100,100);
m_Chart1.GetCanvas().TextOut(50,50,"My output text");

坐标轴label的文字修改

CString strLabel(*LabelText);
strLabel += " Period";
strLabel.SetSysString(LabelText);

坐标轴label 的数值更改

{
  if (Axis == atLeft)
  {
    *MoreLabels = true;

    //Only label if following cases are true   
    switch( LabelIndex ) 
    {    
      case 0: *LabelValue = 900; break;
      case 2: *LabelValue = 5000; break;
      case 1: *LabelValue = 10000; break;
      default: *MoreLabels=false;
    }
  }
}

界面绘图:

CString text;
  int value1,value2,total;

  value1 = 4;
  value2 = 6;

  total = value1+value2;

  text.Format(_T("Serie : %d"),total);

  m_Chart1.GetCanvas().TextOut(10,10,text));

常量定义部分:官方给出一个头文件TeeChartDefines.h,为什么不能通过添加类的方式引入,原因是MS VC++ doesn't natively support import of TeeChart constants. You need to create you own defines file and #include it in your project. We offer a pre built defines file in the Examples\Visual C++ folder. Including the file in your project will allow you to use constants by name as matching the Enum declarations in the Online help file.

附上几个常见问题的解答:
MicroSoft Visual C++ specific

  • How to use TeeChart constants in MS VC++.
  • Where are descriptions of functions such as GetSeries(), Add() and other similar functions?
  • Changes made at design time with the Chart Editor do not always save.
  • How do I add/change text of the Chart Header and Footer at runtime in MS VC++ ?
  • Can I obtain any additional examples with use of TeeChart Pro for VC++?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Teechart在VC++中使用的碎碎念 的相关文章

  • Dronekit 搭配使用Ardupilot 和 PX4

    Dronekit是一个与无人机飞控搭配使用 xff0c 方便开发者使用代码控制无人机 个人认为它会比搭建ros来控制无人机更容易上手一些 对于Dronekit xff0c PX4被支持的较少 xff0c 不可以进行模式切换 xff0c 而对
  • 堆栈存放什么

    此乃转载别人发表 xff0c 作为知识点保存积累 一 xff1a 概念 1 栈 xff1a 当程序进入一个方法时 xff0c 会为这个方法单独分配一块私属存储空间 xff0c 用于存储这个方法内部的局部变量 xff0c 当这个方法结束时 x
  • 嵌入式实时操作系统ucosii原理及应用(任哲)-- --阅读笔记2

    本文是 嵌入式实时操作系统ucosii原理及应用 xff08 任哲 xff09 一书第三章的阅读笔记 xff0c 知识点多为摘录 xff0c 若希望深入了解 xff0c 请购买该书认真研读 由于一些知识比较零散 xff0c 记起来不大方便
  • 如何做项目总结与汇报

    在我们测试工作过程中 xff0c 由于公司业务发展 xff0c 快速迭代等原因 xff0c 我们遇到的项目以小项目居多 更新界面元素 xff0c 上个活动页 xff0c 优化一下原有的功能等等 xff0c 加上事情繁琐 xff0c 任务多
  • 手机安装linux deploy 安装和配置

    最近在淘了一款二手三星的sw 2014 正好最近正在研究智能家居 就想用它来搭建domoticz来管理 xff0c 虽然手头也有一块吃灰的树莓派3b 但是觉得用树莓派搭建有点浪费 xff0c 索性就用这款手机 为什么不用temux xff1
  • 国家分级保护规范要求解读

    仅就项目建设流程而言 xff0c 涉密信息系统建设使用单位应依据 涉及国家秘密的信息系统分级保护管理办法 国保发 2005 16号 确定系统等级 xff0c 结合本单位业务需求和涉密信息制定安全保密需求 xff0c 依据国家保密标准 BMB
  • PX4 编译分析之Airframe文档生成

    PX4 编译分析之Airframe文档生成 本文假设已经阅读了 PX4 的 1 Makefile分析 2 CMakeLists txt分析 这里要分析的是 make airframe metadata 的指令 在 Makefile 文件中找
  • PX4编译文件 Makefile 剖析

    PX4编译文件 Makefile 剖析 当我们执行 cd Firmware进入PX4源码目录 然后make 的时候 我们会看到一串输出基本如下 第一次编译会有更多的输出 2 Built target df driver framework
  • 如何使用vscode运行和调试c/c++程序

    众所周知 vscode是个万金油 xff0c 而且体型轻巧 xff0c 拓展插件多 xff0c 非常适合初学者编程 那么如何使用vscode进行c c 43 43 程序的运行 xff1f 首先必须确保mingw64正确安装 通过以下链接下载
  • PX4 CMakeLists.txt 文件剖析

    PX4 CMakeLists txt 文件剖析 前面对于 PX4 的 Makefile 已经做了比较详细的分析 见这里 这里进一步对 PX4 的 CMakeLists txt 文件结构进行进一步的分析 1 CMake 简述 CMake 是一
  • pymavlink 源码剖析(一)之XML文件的数据解析

    文章目录 1 引言2 pymavlink 的代码自动生成方法3 XML 文件的数据解析3 1 XML 文件预处理3 2 解析 XML 的数据3 2 1 依据协议版本初始化一些版本特征变量3 2 2 解析 XML 文件3 2 3 对解析后结果
  • MAVLink 协议解析之XML定义篇

    文章目录 1 MAVLink XML 文件的基本结构2 message3 enum 1 MAVLink XML 文件的基本结构 下面的代码块是 mavlink 消息定义的 xml 数据文档 代码块 1 span class token pr
  • pymavlink 源码剖析(二)之生成代码

    文章目录 1 引言2 C 代码生成3 generate one 函数分析4 MAVTemplate5 头文件生成 相关 xff1a pymavlink 源码剖析 一 xff09 之XML文件的数据解析MAVLink 协议解析之原理篇 MAV
  • Windows 10 下基于WSL的开源飞控开发环境配置(Ardupilot/PX4)

    目录 0 环境1 环境概述2 配置 WSL2 1 安装 WSL22 2 安装工具链 3 配置VS Code 0 环境 Windows 10 build version gt 61 18917 1 启动 cmd 后输出的第一行文字便是 Win

随机推荐

  • caffe,caffe2 and pytorch

    1 Difference caffe and caffe2 Caffe2 improves Caffe 1 0 in a series of directions 支持大规模分布式训练移动平台的部署在CPU 和 CUDA 之外的新的硬件类型
  • Windows 平台下基于MinGW和Qt 的OpenCV 之CMake 项目配置

    1 MinGW 编译OpenCV 参考其他教程 2 添加系统环境变量 OpenCV DIR 如果有执行 mingw32 make install xff0c 则为 build 目录下install 文件的完整路径 xff0c 如 D ope
  • ubuntu 上NVIDIA驱动和CUDA9.0 的坑之一二

    1 参考链接 1 NVIDIA 官方CUDA安装文档 http docs nvidia com cuda cuda installation guide linux index html 2 NVIDIA 对XFree86 下安装驱动的说明
  • 欧拉角奇异性产生的原因

    1 欧拉角奇异性的原因 1 1 奇异性的定义 奇异性 xff0c 英文Singularity wiki中的解释为 In mathematics a singularity is in general a point at which a g
  • 数据结构----依据出栈顺序判断所需的最少栈空间

    1 问题描述 问题 若元素 a b c d e f g 顺序进栈 xff0c 且出栈顺序是 b d c f e a g 则栈的容量至少是 答案 xff1a 3 2 解法描述与分析 2 1 解法描述 记 1 2 3 4 5 6 分别对应 a
  • error: ‘usleep’ was not declared in this scope

    报错 error usleep was not declared in this scope 解决办法 在出错程序的头文件中加入即可 span class token macro property span class token dire
  • Ubuntu 安装 cuda 时卡在登录界面(login loop)的解决方案之一

    当安装 cuda 时 xff0c 需要我们需要安装NVIDIA driver driver 用来支撑cuda 库的调用 xff0c 在满足官方文档 xff08 见 Table1 xff09 对于cuda 版本对于driver版本的要求情况下
  • QT开发--串口助手的编写

    一 创建工程 正常创建一个widget项目工程 xff0c 控件的方式进行代码研究 创建好编译测试一下工程 可以编译进行下一步操作 二 串口UI界面设计 1 选择ui控件 串口接收下位机数据显示界面控件 选择容器 波特率 串口号 数据位等多
  • 又是一年,我的2013年终总结

    昨天是冬至 xff08 2013年的12月22日 xff09 xff0c 日历摆了乌龙 xff0c 不少人提前把节给过了 xff0c 感觉稀里糊涂的 xff0c 也正如自己这一年的心情一样 xff0c 再过一个星期2013年也就算落下帷幕了
  • 按位与、按位异或、按位取反

    amp 按位与 按位或 按位异或 1 按位与运算 按位与运算符 34 amp 34 是双目运算符 其功能是参与运算的两数各对应的二进位相与 只有对应的两个二进位均为1时 xff0c 结果位才为1 xff0c 否则为0 参与运算的数以补码方式
  • VS断点设置无效的问题

    新的一年第一篇博客点的名字是已经被写烂了的题目 xff0c 并且也是浪费了网友无数的宝贵时间也很难解决的老大难问题 VS无法设定断点问题 先得吐槽一下CSDN的编辑器 xff0c 火狐下竟然无法显示工具条问题 xff0c 可能是因为xhEd
  • &与&&有什么区别?

    一 简要说明 按位与 xff1a a amp b 是把 a 和 b 都转换成二进制数然后再进行与的运算 xff1b 逻辑与 xff1a a amp amp b 就是当且仅当两个操作数均为 true 时 xff0c 其结果才为 true xf
  • VC在编译链接的无故死掉解决方案(防VC6卡死)

    现在网上有很多集成了SP6的VC6 xff0c 但是使用起来会有些某名奇妙的问题 xff0c 也许是我用的龙卷风那个版本不行 xff0c 最常见的就是VC在编译链接的时候经常无故死掉的问题了 xff0c 发生时候关也关不掉 xff0c 停也
  • 给纯SDK程序加上自己的ICO图标

    方法一 xff1a 给纯SDK程序加上自己的ICO图标 1 在项目中建一个resource h文件写入一句 define IDR MAINFRAME 128 2 在项目中建一个resource rc写入一句IDI ICO ICON DISC
  • Teechart 的用法详解:在VC6.0 跟Visual Studio 2005及之后版本的区别

    csdn的文件限制导致 xff0c gif图片不清晰 xff0c 我把文章放到简书上了 xff0c 地址 xff1a http www jianshu com p 2f3f6047d99a 什么时候开始接触teechart呢 xff0c 说
  • 为什么现在多数软件都默认选择安装目录为user下的AppData而非Progamfiles?

    为什么放弃默认选择Program Files 我一直百思不得其解 都是UAC xff08 用户权限控制 xff09 惹得祸 自从VISTA引入了权限机制UAC后 xff0c windows7及以后的系统版本 xff0c 对于Program
  • PIXHAWK飞控的外部控制

    PIXHAWK飞控可以运行PX4原生固件和APM固件 xff0c 我这里用的是PX4原生固件 xff0c 因为这款固件是专门为PIXHAWK量身打造的 xff0c 两者合起来性能更强 不过据说APM固件因为其比较完善 xff0c 更加稳定
  • 只知道用一样东西,不明白他的道理,实在不高明

    无论在哪个领域 xff0c 要抓住问题的本质 xff0c 切勿停留在表面 xff0c 要不断地深入下去 就这个小的领域来说 xff0c 你花个3 5年的时间挤进前20 是非常可能的 精通某一方面的技能 xff0c 才能使自己不容易被别人所替
  • 对VC++工程编译过程的梳理

    对VC 43 43 工程编译过程的梳理 VC 43 43 的项目和解决方案文件解读 xff0c 无非就是利用这些信息进行一个软件的编译 xff0c 这些文件里面是存放的项目的配置和工程的组织 xff0c 类似于makefile文件 但是只有
  • Teechart在VC++中使用的碎碎念

    今天再看官网推荐的Teechart的使用方式 xff0c 感觉他们还是推荐使用VC 43 43 6 0的导出头文件格式 xff0c 来引入所有的类 xff0c 并操作teechart控件 All the files necessary ca