CBarChart柱形圖類
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
{
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
}
在用VC做有關圖表的時候,感覺不是那么方便,在codeproject找到一個柱形圖的實用類,原文地址為:http://www.codeproject.com/KB/miscctrl/CBarChart.aspx。它可以很快速的生成柱狀圖,并且支持輸出位圖、支持打印、支持從數據庫導入。
原文章的類為多字節的,我自己改為了可適應多字節和Unicode版本的,如果有錯的話,還請使用原文章所給出的源碼。下面介紹下基本步驟:
1.添加BarChart.cpp 和 BarChart.h工程;
2.在需要使用的地方添加頭文件
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;