MFC扩展编程实例2D并列叠加柱形图设置标签位置与渐变样式
例程实现并列的叠加柱形图创建,标签位置设置与渐变样式设置。
界面如下:
15.MFC扩展编程实例2D并列叠加柱形图设置标签位置与渐变样式
在图表中创建有四个数据系列,每两个数据系列并列显示,再以每两个数据系列叠加展现。
下面是创建过程与关键代码。
首先创建基于class CMy123View : public 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_STACKED;//BCGP_CT_100STACKED;//图表类型,按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("其他")));
- pBarSeries1->SetGroupID(0);
- pBarSeries2->SetGroupID(0);
- pBarSeries3->SetGroupID(1);
- pBarSeries4->SetGroupID(1);
-
- //向四个数据系列添加数据;
- 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;
- }
复制代码 二维并列叠加柱形图表的创建与前面的非并列叠加类型相似,也是通过下面代码实现。
BCGPChartCategory category = BCGPChartColumn;//图表种类,F12查看全部;
BCGPChartType type = BCGP_CT_STACKED;//BCGP_CT_100STACKED;//图表类型,按F12查看全部;
pChart->SetChartType(category, type);//设置图表类别;
pChart->SetChartTitle(_T("2D并列叠加柱形图"));
但额外还有通过数据系列的成员函数实现分组。
pBarSeries1->SetGroupID(0);
pBarSeries2->SetGroupID(0);
pBarSeries3->SetGroupID(1);
pBarSeries4->SetGroupID(1);
这样创建的四个数据系列就自行分组了,两两一组并列显示。
图表创建后,就可以实现两个设置按钮函数了,两个函数实现图表数据标签显示隐藏,位置设置与图表系列渐变填充样式设置。
可以直接复制使用。
- 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;
- }
- 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;
- }
复制代码 例程使用了MFC扩展库,可以搜索下载使用。
例程源代码下载地址:
|