在用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);
运行结果:
时间: 2024-11-13 09:53:54