当前位置: 首页 > 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.lqws.cn/news/529381.html

相关文章:

  • 【AI News | 20250626】每日AI进展
  • ​​Deepoc大模型在光电研发中的核心技术突破与应用​
  • 使用CSS泄露标签属性值 url路径遍历攻击 -- GPN CTF 2025 PAINting Dice
  • CSS 背景属性用于定义HTML元素的背景
  • 构思的股票交易模拟 3D 虚拟主题游戏《股海逐梦 3D》
  • c++17标准std::filesystem常用函数
  • HDFS(Hadoop分布式文件系统)总结
  • 面试破局:告别流水账,用“故事思维”重塑自我介绍
  • 【RESTful接口设计规范全解析】URL路径设计 + 动词名词区分 + 状态码 + 返回值结构 + 最佳实践 + 新手常见误区汇总
  • Word 中批量转换 LaTeX 公式为标准数学格式的终极方法(附宏设置教程)
  • 高弹性、高可靠!腾讯云 TDMQ RabbitMQ Serverless 版全新发布
  • DOA-BiLSTM+NSGAII+熵权TOPSIS,附气泡图!,梦境优化算法+深度学习+多目标优化+多属性决策!
  • Java底层原理:深入理解JVM性能调优与监控
  • Java设计模式->责任链模式的介绍
  • 什么是 MQTT?
  • Nordic nRF52832 寄存器级 UARTE 发送实现
  • Android-Layout Inspector使用手册
  • R语言机器学习算法实战系列(二十六)基于tidymodels的XGBoost二分类器全流程实战
  • ubuntu22.04系统kubeadm部署k8s高可用集群
  • 手机屏像素缺陷修复及相关液晶线路激光修复原理
  • 简单使用python
  • Milvus 资源调度系统的核心部分:「查询节点」「资源组」「数据库」
  • gitlab https链接转为ssh链接
  • Docker 网络——AI教你学Docker
  • Vue 2 项目中内嵌 md 文件
  • Windows 下使用 nvm 管理 Node.js 多版本 —— 完整指南
  • 动态规划之01背包问题
  • 互联网医院系统源码解析:如何实现视频问诊、电子处方等核心功能?
  • 焊接与热切割作业证用途有哪些
  • 【SpringBoot】Spring Boot + RESTful 技术实战指南