MSChart的简易使用

原创 2007年09月29日 13:46:00


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

  

相关文章推荐

C#使用Log Parser 2.2 + MSchart打造简易Windows日志分析工具

前段时间做了一个简易的Windows日志分析工具(主要针对Windows系统日志SysEvent.Evt这个文件),主要是使用了Log Parser 2.2和MSchart控件,在此和大家分享一下! ...

MSChart的简易使用

一、在工程中加入mschart菜单->Project->Add To Project->Components and Controls->ReGIStered ActiveX Controls->  ...
  • Augusdi
  • Augusdi
  • 2011年05月19日 21:23
  • 941

VC++如何使用Mschart 实例-------网络流量监控程序

源代码http://download.csdn.net/source/2402219     我先简单介绍一下我的思路: 在初始化对话框中,添加一个InitChart函数,功能是初始化Msch...

图表控件MsChart的使用

一.数据源   说到绘制图表,可能很多人的第一反应除了是图表呈现的方式外,更关心的便是数据如何添加,记得在很多年前,哪时要绘制一个数据曲线图,一直找不到好的呈现方式,后来使用了SVG的绘图模式...

MSChart的初步使用和学习

最近做项目使用了MSChart控件,对其进行了一些操作和使用,现在将使用之中的相关纪录在此处,以备后用。...

MsChart 的使用(转载)

void CMoreDMcode::OnCacluteDelta(int nRow)  { m_Chart.SetRedraw(false);  m_Chart.SetRow(1); for(...

MsChart的使用

1.插入控件 2.编写代码 #include "VcPlot.h" #include "VcAxis.h" #include "VcValue...

MFC画图的强大工具MSChart的使用

MFC画图的强大工具MSChart的使用 图表由于其直观明了的特性,在实际应用中十分很广泛。我们常常希望数据能通过图表来显示其特性。例如在Delphi和C++Builder编程中,我们可以很方便地实...

Mschart控件的方法使用

void CMoreDMcode::OnCacluteDelta(int nRow) { m_Chart.SetRedraw(false); m_Chart.SetRow(1); for(...

MSChart使用技巧总结

上一篇文章写了用dotnetCHARTING 制作柱形图,折线图和圆饼图 园友一直在推荐用微软的MSChart..于是,这几天工作之余研究了一下,其中也发现了不少问题.   首先当然需要下载MSCha...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MSChart的简易使用
举报原因:
原因补充:

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