• CBarChart柱形图类


    在用VC做有关图表的时候,感觉不是那么方便,在codeproject找到一个柱形图的实用类,原文地址为:http://www.codeproject.com/KB/miscctrl/CBarChart.aspx。它可以很快速的生成柱状图,并且支持输出位图、支持打印、支持从数据库导入。

    下面介绍下基本步骤:

    1.添加BarChart.cpp 和 BarChart.h工程;

    2.在需要使用的地方添加头文件

    #include "BarChart.h"

    3.定义一个CBarChart的变量;
    CBarChart    m_chart;

    4.在实现文件里面使用Create方法创建图表柱形图;

          1).创建图表

    // Create a bar chart control
        if (!m_chart.Create(
            rcBound,              // Bounding rectangle of the control
            this,                 // A pointer to the parent window to be shown on
            0 ))                  // ID of this control
        {
            // Error, can't create the chart
        }
        //If Create suceeds, it returns TRUE.

          2).设置标题、背景颜色

    m_chart.SetTitle("A test chart, displaying some dummy data...");
    m_chart.SetBKColor(RGB(255, 255, 240));

          3).添加柱形图表

    m_chart.AddBar(
    1600.356,           // A value to be shown at the top of the bar
    "Jan",              // A label under the bar chart
    RGB(255,255,0));    // Color of the bar

          4).网格线显示、柱形描述、柱形提示

    m_chart.ShowGrid(m_bShowGrid, TRUE);            // Show/Hide grids
    m_chart.ShowBarText(1, m_bShowText, TRUE);      // Show/Hide values(top)
    m_chart.ShowLabel(m_bShowLabel, TRUE);          // Show/Hide labels(bottom)
    m_chart.ShowTooltip(m_bShowTip);                // Activate/deactivate tooltips

          5).网格线大小

    SetGridLines(
    int nHorLineCount,      // Number of horizontal lines, 0 = ignore
    int nVerLineCount,      // Number of vertical lines, 0 = ignore
    BOOL bFixedSize,        // If TRUE, first 2 parameters will be ignored
    int nFixedSize)         // A fixed value that defines distance between 2 lines,
                            // Will be used if previous parameter is set to TRUE

        6).缩放

    m_chart.SetAutoScale(m_bScale);         // Set chart to be auto scaled
    // Reposition window, so it finds out the size to fit into
    m_chart.SetWindowPos( 0, 0, 0,
    rcClient.Width(),
    rcClient.Height() , SWP_NOMOVE);
    m_chart.Refresh();                      // Force the chart to redraw itself
    
    // You might also need to override OnSize of the
    // Parent to position the chart, so it is always at the size you like

          7).删除柱形

    m_chart.RemoveAt(nRemIndex);    // Removes the item indexed nRemIndex.
                                    // Index is zero based.
    m_chart.RemoveAll();            // Removes all bars

          8).保存bmp文件

    // Save chart as a bitmap file
    if (!m_chart.SaveToFile())
        {
        AfxMessageBox(m_chart.GetLastErrorMessage());
        };

          9).打印

    m_chart.Print();        // Prints the whole chart fitted in the page.
    // If you have a lot of bars, I recommend selecting landscape in the 
    // print dialog box.

          10).连接数据库

    //--------------------------------------------创建ODBC连接
    // Use this form to call a stored procedure or a query and use 
    // result set as chart input
    
    ReadFromDatabase("DS Name", "Stored proc/Query Name", "List of all parameters",
             "Bars Color", "UserName", "Password"));
    
    // Note that the query or stored procedure MUST have at least 2 columns,
    // First column MUST be of type char with maximum length of 50 and
    // Second a double. These columns will be used as input data for the chart.
    
    
    //--------------------------------------------连接数据库表
    m_chart.ReadFromDatabase("DS Name", "Table name", "Filter",
    "Laabel column name", "dValue column name",
    Bars color , "username", "password");
    
    
    
    //--------------------------------------------显示
    if (!m_chart.ReadFromDatabase("CHTst", "SpChartGetSale", "1, 12",
                          RGB(0, 0, 0), "hamed", "hamed"))
        {
            AfxMessageBox(m_chart.GetLastDatabaseErrMessage());
        };
    or
    m_chart.ReadFromDatabase("CHTst", "Sales", "",
    "Month", "SaleRate",
    RGB(0, 0, 0) , "hamed", "hamed");

     

    5.实例

    CRect rcClient;
        GetClientRect(&rcClient);
    
        if (!m_chart.Create(CRect(110, 50, 
                rcClient.Width()-10, 
                rcClient.Height() - 50), this, 1050 ))
        {
            if (!m_chart.GetSafeHwnd())
            {
                AfxMessageBox("Unable to create the chart control");
                return;
            }
    
            m_chart.Reset();
            m_chart.SetAutoScale(FALSE);
        }
    
        m_chart.SetTitle("A test chart, displaying some dummy data...");
        m_chart.SetBKColor(RGB(255, 255, 240));
        m_chart.ShowTooltip(TRUE);
    
        m_chart.AddBar(1600.356,"Jan", RGB(255,255,0));
        m_chart.AddBar(2841.5468,"Feb", RGB(255,0,0));
        m_chart.AddBar(1045.3258,"Mar", RGB(100,100,200));
        m_chart.AddBar(1502.215,"Apr", RGB(0,255,0));
        m_chart.AddBar(1467,"MAY", RGB(255,255,255));
        m_chart.AddBar(1678.354,"JUN", RGB(200,255,255));
        m_chart.AddBar(1785.689,"JUL", RGB(255,240,40));
        m_chart.AddBar(1283.099,"AUG", RGB(255,60,130));
        m_chart.AddBar(1554.879,"SEP", RGB(255,255,200));
        m_chart.AddBar(1400.10,"OCT", RGB(130,235,250));
        m_chart.AddBar(1600.556,"NOV", RGB(100,150,200));
        m_chart.AddBar(1900.3546,"DES", RGB(150,240,80), TRUE);

    运行结果:

    image

    源文件下载:http://download.csdn.net/detail/wuyuan2011woaini/9592992

  • 相关阅读:
    Socket
    字符串,byte,字典转换整理
    1-嵌入式面试题库
    10-FreeRTOS 队列
    9-FreeRTOS API获取任务使用CPU时间
    7-代码区 | 常量区 | 静态区(全局区) | 堆区 | 栈区
    8-FreeRTOS任务API
    7-FreeRTOS时间片进行任务调度
    6-C指针
    用Union体测试处理器大小端
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/5726219.html
Copyright © 2020-2023  润新知