CMSChart 示例

    技术2022-05-19  20

    CMSChart 示例

     

     

     

    作者Thinkry  来源:  点击:  

     

     

    一、在工程中加入mschart菜单->Project->Add To Project->Components and Controls->Registered ActiveX Controls->    Microsoft Chart Control, version 6.0 (OLEDB)

    二、在CDemoView中加入CMSChart m_Chart

    三、创建及设置m_Chart

    3.1 OnCreate中创建CMSChart// CDemoView::OnCreate()    CRect rc;    GetClientRect(&rc);    if(!m_Chart.Create("mschart", WS_CHILD| WS_VISIBLE, rc, this, 10))        return -1;

    3.2 OnSize中调整m_Chart的大小,使之能随窗口大小变化而变化// CDemoView::OnSize    if( m_Chart.GetSafeHwnd() )        m_Chart.MoveWindow( 0, 0, cx, cy );   

    3.3 设置m_Chartvoid CDemoView::InitChart(){    // 设置标题    m_Chart.SetTitleText("mschart 示例 by thinkry@263.net");

        // 下面两句改变背景色    m_Chart.GetBackdrop().GetFill().SetStyle(1);    m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255);

        // 显示图例    m_Chart.SetShowLegend(TRUE);    m_Chart.SetColumn(1);    m_Chart.SetColumnLabel((LPCTSTR)"1号机");    m_Chart.SetColumn(2);    m_Chart.SetColumnLabel((LPCTSTR)"2号机");    m_Chart.SetColumn(3);    m_Chart.SetColumnLabel((LPCTSTR)"3号机");

        // 栈模式//    m_Chart.SetStacking(TRUE);

        // Y轴设置    VARIANT var;    m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetAuto(FALSE);    // 不自动标注Y轴刻度    m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMaximum(100);    // Y轴最大刻度    m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinimum(0);        // Y轴最小刻度    m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMajorDivision(5);    // Y轴刻度5等分    m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinorDivision(1);    // 每刻度一个刻度线    m_Chart.GetPlot().GetAxis(1,var).GetAxisTitle().SetText("小时");    // Y轴名称

        // 3条曲线    m_Chart.SetColumnCount(3);

        // 线色    m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().GetVtColor().Set(0, 0, 255);    m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().GetVtColor().Set(255, 0, 0);    m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetPen().GetVtColor().Set(0, 255, 0);

        // 线宽(对点线图有效)    m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(50);    m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().SetWidth(100);    m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetPen().SetWidth(2);

        // 数据点类型显示数据值的模式(对柱柱状图和点线图有效)    // 0: 不显示    1: 显示在柱状图外    // 2: 显示在柱状图内上方    3: 显示在柱状图内中间    4: 显示在柱状图内下方    m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1);    m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1);    m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1);}

    3.4 设置数据void CDemoView::DrawChart(){    int nRowCount = 6;    m_Chart.SetRowCount(nRowCount);

        VARIANT var;    m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(FALSE);            // 不自动标注X轴刻度    m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerLabel(1);// 每刻度一个标注    m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerTick(1); // 每刻度一个刻度线    m_Chart.GetPlot().GetAxis(0,var).GetAxisTitle().SetText("日期");            // X轴名称

        char buf[32];    srand( (unsigned)time( NULL ) );

        for(int row = 1; row <= nRowCount; ++row)    {        m_Chart.SetRow(row);        sprintf(buf, "%d", row);

            m_Chart.SetRowLabel((LPCTSTR)buf);        m_Chart.GetDataGrid().SetData(row, 1, rand() * 100 / RAND_MAX, 0);        m_Chart.GetDataGrid().SetData(row, 2, rand() * 100 / RAND_MAX, 0);        m_Chart.GetDataGrid().SetData(row, 3, rand() * 100 / RAND_MAX, 0);    }

        m_Chart.Refresh();    }

    3.5 改变显示类型

    // 折线图void CDemoView::OnChartLine() {    m_Chart.SetChartType(3);        DrawChart();}

    // 柱状图    void CDemoView::OnChartCombi() {    m_Chart.SetChartType(1);        DrawChart();}

    // 饼状图void CDemoView::OnChartPie() {    m_Chart.SetChartType(14);        DrawChart();}

     


    最新回复(0)