美文网首页
vs2013 加入chartctrl

vs2013 加入chartctrl

作者: Drlilian | 来源:发表于2020-06-16 15:58 被阅读0次

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

    相关文章

      网友评论

          本文标题:vs2013 加入chartctrl

          本文链接:https://www.haomeiwen.com/subject/uuorvctx.html