工控编程吧
标题:
MFC扩展编程实例2D簇状柱形图设置标签位置与渐变样式
[打印本页]
作者:
qq263946146
时间:
2020-1-13 11:35
标题:
MFC扩展编程实例2D簇状柱形图设置标签位置与渐变样式
MFC扩展编程实例2D簇状柱形图设置标签位置与渐变样式
我们知道图表有很多类型,如二维的柱形图,柱形图又细分有簇状的,叠加的,并列叠加等等。
还有三维类型的图表,这里实现常用图表的创建与标签,渐变样式设置。
效果如下图:
(, 下载次数: 0)
上传
点击文件名下载附件
例程界面显示的为二维簇状柱形图,图表显示有四个数据系列,4个为一簇,每个系列以柱形显示。
界面上两个按钮对应实现图表数据标签位置设置,显示隐藏及数据系列填充的渐变样式设置。
例程使用的扩展库可以搜索BCGP下载使用。
下面是例程关键代码与实现过程。
首先创建基于CBCGPFormView的单文档工程,并添加变量CBCGPChartCtrl m_wndChart,
及虚函数Create,在函数Create内实现图表 变量的创建,代码如下:
BOOL CMy123View::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
BOOL bRst = CBCGPFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);;
//获取图表指针;
m_wndChart.SubclassDlgItem(IDC_CHART,this);//子类化图表;
CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
BCGPChartCategory category = BCGPChartColumn;//图表种类,F12查看全部;
BCGPChartType type = BCGP_CT_SIMPLE;//图表类型,按F12查看全部;
pChart->SetChartType(category, type);//设置图表类别;
pChart->SetChartTitle(_T("2D簇状柱形图"));
CBCGPChartBarSeries* pBarSeries1 = DYNAMIC_DOWNCAST(CBCGPChartBarSeries, pChart->CreateSeries(_T("能源")));
CBCGPChartBarSeries* pBarSeries2 = DYNAMIC_DOWNCAST(CBCGPChartBarSeries, pChart->CreateSeries(_T("税收")));
CBCGPChartBarSeries* pBarSeries3 = DYNAMIC_DOWNCAST(CBCGPChartBarSeries, pChart->CreateSeries(_T("维护")));
CBCGPChartBarSeries* pBarSeries4 = DYNAMIC_DOWNCAST(CBCGPChartBarSeries, pChart->CreateSeries(_T("其他")));
//向四个数据系列添加数据;
srand((unsigned)time(NULL));
COleDateTime now = COleDateTime::GetCurrentTime();
CString sYear;
for(int i=5;i>0;i--)
{
sYear.Format(_T("%d"), now.GetYear() - i);
pBarSeries1->AddDataPoint(sYear, rand()%20+1);
}
pBarSeries2->AddDataPoint(10);
pBarSeries2->AddDataPoint(12);
pBarSeries2->AddDataPoint(15);
pBarSeries2->AddDataPoint(17);
pBarSeries2->AddDataPoint(12);
pBarSeries3->AddDataPoint(5);
pBarSeries3->AddDataPoint(7);
pBarSeries3->AddDataPoint(11);
pBarSeries3->AddDataPoint(14);
pBarSeries3->AddDataPoint(19);
pBarSeries4->AddDataPoint(2);
pBarSeries4->AddDataPoint(3);
pBarSeries4->AddDataPoint(5);
pBarSeries4->AddDataPoint(3);
pBarSeries4->AddDataPoint(2);
//添加添加到布局管理器统一管理布局;
if (GetLayout() == NULL)
return bRst;
CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
if (pLayout == NULL)
return bRst;
pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
//
return bRst;
}
复制代码
图表种类与类别有很多,对应是调用函数
SetChartType来设置。
二维簇状柱形图对应种类,类别为下面代码表示。
BCGPChartCategory category = BCGPChartColumn;//图表种类,F12查看全部;
BCGPChartType type = BCGP_CT_SIMPLE;//图表类型,按F12查看全部;
pChart->SetChartType(category, type);//设置图表类别;
代码中使用了界面布局管理器,所以请在视窗类构造函数中开启
EnableLayout();
代码中还使用了一个图片控件ID,所以请在视窗对话框资源中添加图片控件,修改ID为
IDC_CHART。
然后就是数据标签位置的设置与标签显示隐藏,
对应按钮点击函数如下:
void CMy123View::OnBnClickedButton1()//图表修改数据标签位置;
{
static int nPos=0;
CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
//数据标签位置有如下几种设置;
//enum LabelPosition
//{
// LP_DEFAULT_POS,//0
// LP_CENTER,//1
// LP_INSIDE_END,
// LP_INSIDE_BASE,
// LP_OUTSIDE_END
//};
if(nPos == -1)
pChart->ShowDataLabels(false);
else
{
pChart->ShowDataLabels(true);
BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
dataLabelOptions.m_position = (BCGPChartDataLabelOptions::LabelPosition)nPos;
pChart->SetDataLabelsOptions(dataLabelOptions);
}
pChart->Redraw();
//
nPos++;
nPos=nPos>4?-1:nPos;
}
复制代码
可以看到数据标签显示隐藏可以调用图表函数
ShowDataLabels实现,
数据标签位置设置是调用图表函数
SetDataLabelsOptions实现。
位置设置是通过枚举类型
enum LabelPosition选择,如代码所示。
最后就是图表的数据系列填充渐变颜色的设置,
对应设置按钮点击函数如下:
void CMy123View::OnBnClickedButton2()
{
//渐变为枚举类型,有以下供选择使用;
//enum BCGP_GRADIENT_TYPE
//{
// BCGP_GRADIENT_TYPE_FIRST = 0,
// BCGP_NO_GRADIENT = BCGP_GRADIENT_TYPE_FIRST,
// BCGP_GRADIENT_HORIZONTAL = 1,
// BCGP_GRADIENT_VERTICAL = 2,
// BCGP_GRADIENT_DIAGONAL_LEFT = 3,
// BCGP_GRADIENT_DIAGONAL_RIGHT = 4,
// BCGP_GRADIENT_CENTER_HORIZONTAL = 5,
// BCGP_GRADIENT_CENTER_VERTICAL = 6,
// BCGP_GRADIENT_RADIAL_TOP = 7,
// BCGP_GRADIENT_RADIAL_CENTER = 8,
// BCGP_GRADIENT_RADIAL_BOTTOM = 9,
// BCGP_GRADIENT_RADIAL_LEFT = 10,
// BCGP_GRADIENT_RADIAL_RIGHT = 11,
// BCGP_GRADIENT_RADIAL_TOP_LEFT = 12,
// BCGP_GRADIENT_RADIAL_TOP_RIGHT = 13,
// BCGP_GRADIENT_RADIAL_BOTTOM_LEFT = 14,
// BCGP_GRADIENT_RADIAL_BOTTOM_RIGHT = 15,
// BCGP_GRADIENT_BEVEL = 16,
// BCGP_GRADIENT_PIPE_VERTICAL = 17,
// BCGP_GRADIENT_PIPE_HORIZONTAL = 18,
// BCGP_GRADIENT_TYPE_LAST = BCGP_GRADIENT_PIPE_HORIZONTAL
//};
static int nType=-1;//-1为恢复缺省渐变,0为不使用渐变;
CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
CBCGPBrush::BCGP_GRADIENT_TYPE type = (CBCGPBrush::BCGP_GRADIENT_TYPE)nType;
for (int i = 0; i < pChart->GetSeriesCount(); i++)
{
CBCGPChartSeries* pSeries = pChart->GetSeries(i);
pSeries->SetDefaultFillGradientType(type);
}
pChart->Redraw();
//
nType++;
nType=nType>18?-1:nType;
}
复制代码
图表数据系列填充颜色由数据系列成员函数
SetDefaultFillGradientType设置。
渐变类型也是枚举类型
enum BCGP_GRADIENT_TYPE,其中
BCGP_NO_GRADIENT表示不使用渐变。
例程其他细节可以下载源代码学习.
例程源代码下载:
(, 下载次数: 0)
上传
点击文件名下载附件
[weixinlianxi]1[/weixinlianxi]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4