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

posted @ 2016-08-01 16:11  wuyuan2011woaini  阅读(811)  评论(0编辑  收藏  举报