在用VC做有关图表的时候,感觉不是那么方便,在codeproject找到一个柱形图的实用类,原文地址为:http://www.codeproject.com/KB/miscctrl/CBarChart.aspx。它可以很快速的生成柱状图,并且支持输出位图、支持打印、支持从数据库导入。
原文章的类为多字节的,我自己改为了可适应多字节和Unicode版本的,如果有错的话,还请使用原文章所给出的源码。下面介绍下基本步骤:
1.添加BarChart.cpp 和 BarChart.h工程;
2.在需要使用的地方添加头文件
#include
"BarChart.h"
3.定义一个CBarChart的变量;
4.在实现文件里面使用Create方法创建图表柱形图;
例如以下代码可以在对话框的初始化函数里面添加:
BOOL CBar_TestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//`````````````````````
// TODO: 在此添加额外的初始化代码
CRect rcClient;
GetClientRect(&rcClient);
if (!m_chart.Create(CRect(
20,
20, rcClient.Width()-
20, rcClient.Height()-
20),
this,
1050 ))
{
if (!m_chart.GetSafeHwnd())
{
AfxMessageBox(_T(
"不能创建图表控件!"));
return FALSE;
}
m_chart.Reset();
m_chart.SetAutoScale(FALSE);
}
m_chart.SetTitle(_T(
"一个测试图,显示一些虚拟数据"));
m_chart.SetBKColor(RGB(
255,
255,
240));
m_chart.ShowTooltip(TRUE);
m_chart.AddBar(
1600.
356,_T(
"一月"),RGB(
255,
255,
0));
m_chart.AddBar(
2841.
5468,_T(
"二月"), RGB(
255,
0,
0));
m_chart.AddBar(
1045.
3258,_T(
"三月"), RGB(
100,
100,
200));
m_chart.AddBar(
1502.
215,_T(
"四月"), RGB(
0,
255,
0));
m_chart.AddBar(
1467,_T(
"五月"), RGB(
255,
255,
255));
m_chart.AddBar(
1678.
354,_T(
"六月"), RGB(
200,
255,
255));
m_chart.AddBar(
1785.
689,_T(
"七月"), RGB(
255,
240,
40));
m_chart.AddBar(
1283.
099,_T(
"八月"), RGB(
255,
60,
130));
m_chart.AddBar(
1554.
879,_T(
"九月"), RGB(
255,
255,
200));
m_chart.AddBar(
1400.
10,_T(
"十月"), RGB(
130,
235,
250));
m_chart.AddBar(
1600.
556,_T(
"十一月"),RGB(
100,
150,
200));
m_chart.AddBar(
1900.
3546,_T(
"十二月"), RGB(
150,
240,
80), TRUE);
return TRUE;
// 除非将焦点设置到控件,否则返回 TRUE
}
效果如下所示:

对于的一些控制函数,参看原文或者源代码。下载地址:http://download.csdn.net/source/2532159
2012年4月18日 多字节下乱码问题
修改如下:
void CBarChart::CChartBar::CreateLabelFont()里面m_lf.lfCharSet = ARABIC_CHARSET;改为m_lf.lfCharSet = GB2312_CHARSET;
BOOL CChartTip::Create(CWnd *pParentWnd, BOOL *pbEnable, CString* lpszTitle, int nDelay)里面lf.lfCharSet = ARABIC_CHARSET;改为lf.lfCharSet = GB2312_CHARSET;