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);