vs2013 加入chartctrl

2020-06-16  本文已影响0人  Drlilian

创建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<DATA_UPDATE_LENGHT; 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

上一篇下一篇

猜你喜欢

热点阅读