创建MFC简单工程,将ChartCtrl源码添加到工程文件下,新建筛选器ChartCtrl。
2、将源码导入对应的新建筛选器:
3、添加自定义控件“CustomCtrl”,并修改style 、class、ID值
4、在xxDlg.cpp文件中加入引用的头文件路径:
#include "ChartCtrl\ChartCtrl.h"
5、打开资源界面,右击custom控件选择“添加变量”
点击运行,创建框架成功:
7、初始化并创建坐标轴显示范围
//初始化显示的区域大小
#define DATA_SHOW_X_AXIS 20000 //X轴显示的点最大值
#define DATA_SHOW_Y_AXIS 10000 //Y轴显示的点最大值
//初始化画图界面窗口
void CmyApplicationDlg::ChartCtrlInit(void) {
///////////////////////显示主题/////////////////////////////
m_ChartCtrl.GetTitle()->AddString(_T("采样信号波形"));
///////////////////////创建坐标xy标识/////////////////////////////
//m_ChartCtrl.GetBottomAxis()->GetLabel()->SetText(_T("强度"));
//m_ChartCtrl.GetLeftAxis()->GetLabel()->SetText(_T("采样点"));
///////////////////////创建坐标显示范围/////////////////////////////
CChartAxis *pAxis = NULL;
pAxis = m_ChartCtrl.CreateStandardAxis(CChartCtrl::BottomAxis);
pAxis->SetMinMax(0, DATA_SHOW_X_AXIS);
pAxis = m_ChartCtrl.CreateStandardAxis(CChartCtrl::LeftAxis);
pAxis->SetMinMax(0, DATA_SHOW_Y_AXIS);
}
添加定时器,并初始化显示缓冲buff:
//初始化显示的区域大小
#define DATA_SHOW_LENGHT 20000 //总共显示的点个数
#define DATA_UPDATE_LENGHT 1000 //每次更新的点个数
#define DATA_SHOW_X_AXIS 20000 //X轴显示的点最大值
#define DATA_SHOW_Y_AXIS 10000 //Y轴显示的点最大值
//要显示点的缓冲数据
static double xBuff[DATA_SHOW_LENGHT], yBuff[DATA_SHOW_LENGHT];
//显示点数据包初始化
void CmyApplicationDlg::DataBuffInit(void)
{
for (int i = 0; i < DATA_SHOW_LENGHT; i++) {
xBuff[i] = i;
yBuff[i] = cos((i)) * 10 + 50;
}
}
// CmyApplicationDlg 消息处理程序
BOOL CmyApplicationDlg::OnInitDialog()
{
//...窗口初始化。。。
// TODO: 在此添加额外的初始化代码
DataBuffInit();
ChartCtrlInit();
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
8、添加显示函数和定时器
void CmyApplicationDlg::DataShow(double *xb, double *yb, int len) {
m_ChartCtrl.EnableRefresh(false);
CChartLineSerie *pLineSerie;
m_ChartCtrl.RemoveAllSeries();
pLineSerie = m_ChartCtrl.CreateLineSerie();
pLineSerie->SetSeriesOrdering(poNoOrdering);//设置为无序
pLineSerie->AddPoints(xb, yb, len);
UpdateWindow();
m_ChartCtrl.EnableRefresh(true);
}
void CmyApplicationDlg::OnTimer(UINT nIDEvent) {
static int offset = 0;
for (int m = 0; m < DATA_SHOW_LENGHT - DATA_UPDATE_LENGHT; m++)
{
//xd[m] = xd[DATA_UPDATE_LENGHT + m];
yBuff[m] = yBuff[DATA_UPDATE_LENGHT + m];
}
int index = DATA_SHOW_LENGHT - DATA_UPDATE_LENGHT;
for (int i = 0; i { //yd[index + i] = cos((index + i + w)/5) * 50 + 100+rand() / 1000; yBuff[index + i] = cos((i+offset)/5) * DATA_SHOW_Y_AXIS/4 + rand()/1000+ DATA_SHOW_Y_AXIS / 2; } DataShow(xBuff, yBuff, DATA_SHOW_LENGHT); offset++; if (offset > 10000) { offset = 0; } } ———————————————— 版权声明:本文为CSDN博主「jobschu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u014159143/article/details/86611235