当前位置: 首页 > news >正文

MFC制作动态波形图( ChartCtrl)

1、创建工程

首先第一步,创建工程,这里我简单制作一个界面,主要用于展示效果,并将 ChartCtrl 所有的源码添加进工程当中。
在这里插入图片描述
https://cdn.jsdelivr.net/gh/zhongli0226/PicGoCDN/img/20250222161044.png

2. 创建控件

这里我们添加自定义控件“CustomCtrl”,并修改 style、class、ID 值。
Style : 0x52010000
Class : ChartCtrl
ID : IDC_CUSTOM_SHOW
在这里插入图片描述

3. 添加变量

先在 xxDlg.h 中引入头文件路径。

#include "ChartCtrl\ChartCtrl.h"
#include "ChartCtrl\ChartLineSerie.h"
#include "ChartCtrl\ChartAxis.h"

[!NOTE]
注意这里,需要在工程中添加一下头文件路径在设置里找到如下,根据自己实际地址选择
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 代码编写

.cpp

BEGIN_MESSAGE_MAP(CTabDlg_Data_Waveform, CDialogEx)ON_WM_TIMER() // 添加定时器消息
END_MESSAGE_MAP()//创建定时器消息回调接口
void CTabDlg::OnTimer(UINT_PTR nIDEvent)
{CDialogEx::OnTimer(nIDEvent);
}

2、创建坐标和画线

初始部分
//创建坐标xy标识
CChartAxis *pAxis = NULL;
pAxis = m_ChartCtrl.CreateStandardAxis(CChartCtrl::BottomAxis);
pAxis->SetAutomatic(true);
pAxis = m_ChartCtrl.CreateStandardAxis(CChartCtrl::LeftAxis);
pAxis->SetAutomatic(true);
m_pLineSerie = m_ChartCtrl.CreateLineSerie();
void CTabDlg_Data_Waveform::OnTimer(UINT_PTR nIDEvent)
{++m_count;m_pLineSerie->ClearSerie();LeftMoveArray(m_HightSpeedChartArray, PIONT_LENGTH, randf(0, 10));LeftMoveArray(m_X, PIONT_LENGTH, m_count);m_pLineSerie->AddPoints(m_X, m_HightSpeedChartArray, PIONT_LENGTH);CDialogEx::OnTimer(nIDEvent);
}/// 
/// \brief 左移数组
/// \param ptr 数组指针
/// \param data 新数值
///
void CTabDlg_Data_Waveform::LeftMoveArray(double* ptr, size_t length, double data)
{for (size_t i = 1; i < length; ++i){ptr[i - 1] = ptr[i];}ptr[length - 1] = data;
}double CTabDlg_Data_Waveform::randf(double min, double max)
{int minInteger = (int)(min * 10000);int maxInteger = (int)(max * 10000);int randInteger = rand() * rand();int diffInteger = maxInteger - minInteger;int resultInteger = randInteger % diffInteger + minInteger;return resultInteger / 10000.0;
}
void CChartCtrldemoDlg::OnBnClickedButtonStart()
{// TODO: 在此添加控件通知处理程序代码KillTimer(0);ZeroMemory(&m_HightSpeedChartArray, sizeof(double) * PIONT_LENGTH);for (size_t i = 0; i < PIONT_LENGTH; ++i){m_X[i] = i;}m_count = PIONT_LENGTH;m_pLineSerie->ClearSerie();SetTimer(0, 0, NULL);
}void CChartCtrldemoDlg::OnBnClickedButtonStop()
{// TODO: 在此添加控件通知处理程序代码KillTimer(0);
}

在 .h 中类中声明函数

afx_msg void OnTimer(UINT_PTR nIDEvent);CChartCtrl m_ChartCtrl;CChartLineSerie* m_pLineSerie;double m_HightSpeedChartArray[2096];double m_X[2096];unsigned int m_count;const size_t PIONT_LENGTH;void LeftMoveArray(double* ptr, size_t length, double data);double randf(double min, double max);

https://gitee.com/hxs273992029/chart-ctrl.git

http://www.lryc.cn/news/575417.html

相关文章:

  • Python(一)实现一个爬取微信小程序数据的爬虫+工程化初步实践
  • 【FR801xH】Ubuntu24.04搭建富芮坤FR801xH系列开发环境教程
  • 美团京东Clean Architecture实战
  • 【算法深练】栈特性的解题密码:LIFO规则在题型中的灵活运用
  • 生僻字处理工具类
  • 价格敏感带争夺战!澳洲电商双雄增长密码,3大本土护城河尚存
  • C# 项目使用obfuscar混淆
  • 华曦达港股IPO递表,AI Home生态构建智能生活新蓝图
  • 2025 Java开发生态全景图:云原生、AI与性能优化的技术融合
  • 广州华锐互动:技术与创意双驱动的 VR 先锋​
  • 基于组件的软件开发(CBSD)与面向服务的架构(SOA)的对比分析
  • Android-Layout Inspector使用手册
  • VSCode插件开发
  • Vue3 中 toRef 与 toRefs 的深度解析与实战应用
  • Sentinel 授权规则详解与自定义异常处理
  • 【机器学习第一期(Python)】梯度提升决策树 GBDT
  • 【机器学习第二期(Python)】优化梯度提升决策树 XGBoost
  • Linux命令-Searching-locate
  • Docker compoes与私有仓库部署
  • 基于vue3+ByteMD快速搭建自己的Markdown文档编辑器
  • Midscene.js:使用 LLMs.txt 快速生成 AI 自动化测试用例「喂饭教程」
  • [Andrej Karpathy] 大型语言模型作为新型操作系统
  • 华为OD 机试 2025-黑板上色
  • 【25软考网工】第十章 网络规划与设计(2)网络规划与分析、网络结构与功能
  • 如何进行 iOS App 混淆加固?IPA 加壳与资源保护实战流程
  • 如何将视频从 iPhone 发送到 Android 设备
  • 数字孪生技术驱动UI前端变革:从静态展示到动态交互的飞跃
  • uniapp 和原生插件交互
  • 小程序入门:理解小程序页面配置
  • vue + vue-router写登陆验证的同步方法和异步方法,及页面组件的分离和后端代码