CMSChart 示例

原创 2003年12月31日 10:18:00

mschart

一、在工程中加入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_Chart
void 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();
}

 

CMsChart使用方法

一、在工程中加入 mschart     菜单->Project->Add To Project->Components and Controls->Registered ActiveX Contr...
  • max2008
  • max2008
  • 2007年07月16日 17:46
  • 2088

CMsChart的使用方法

 一、在工程中加入 mschart     菜单->Project->Add To Project->Components and Controls->Registered ActiveX Contr...
  • Augusdi
  • Augusdi
  • 2011年05月19日 22:55
  • 2368

CMsChart使用方法

CMsChart使用方法2008-12-10 21:47一、在工程中加入 mschart     菜单->Project->Add To Project->Components andControl...
  • skyremember
  • skyremember
  • 2009年03月07日 21:53
  • 3617

CMsChart的使用方法

一、在工程中加入 mschart     菜单->Project->Add To Project->Components and Controls->Registered ActiveX Contr...
  • sgdgoodboy
  • sgdgoodboy
  • 2007年09月29日 13:43
  • 1556

一个简单的MFC柱状图显示程序

英语课最后大作业是做一份调查问卷,最后数据统计出来,结果用柱状图显示。 但是考虑到题目有20多道,全部做成柱状图一个个截图未免太俗套,不符合一个码农的口味,因此,我就花了两三个小时,...
  • ljsant
  • ljsant
  • 2016年10月24日 14:34
  • 528

用CMSChart绘制XY轴曲线图坐标

觉得这个控件好复杂呢void VIEWRESULT::DrawPicInitial() //这个函数用于重画新的图形的坐标范围{  VARIANT var; m_Chart.SetRowCount(l...
  • lylar2008
  • lylar2008
  • 2008年03月03日 10:39
  • 959

安装配置AdventureWorks2008示例数据库

从观望
  • Trueman_onlyme
  • Trueman_onlyme
  • 2014年09月11日 16:38
  • 924

简单的Socket示例

【服务器端步骤】 初始化Windows Socket库 创建Socket: socke函数 绑定Socket: bind函数 监听Socket: listen 接受Socket:accept...
  • qq_27991659
  • qq_27991659
  • 2016年05月24日 15:04
  • 556

Apache组件commons的Codec包的使用实例

base64特别适合在http,mime协议下快速传输数据。 base64编码 虽然叫做加密解密,编码后不是明文,其实这种是非常的简单的 下面是代码示例 package com.commons....
  • jintianhen1
  • jintianhen1
  • 2013年07月17日 16:19
  • 1340

【mysql学习系列】Mysql数据库导入官方示例数据库

Mysql用了很久了,但一直都只是简单使用而已,一直很想深入研究学习一下,所以以这个为契机,写点blog记录下学习mysql的过程,也算是一个学习笔记吧。 mysql官方提供了很好的实验用示例数据库,...
  • tangzhihaode
  • tangzhihaode
  • 2015年09月23日 21:49
  • 1019
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CMSChart 示例
举报原因:
原因补充:

(最多只允许输入30个字)