MFC扩展编程实例多个圆饼创建与统一设置标题位置
当前例程实现在一个图表中创建显示多个圆饼图功能,并可以统一设置这些圆饼图的标题位置。
效果如下图。
MFC扩展编程实例多个圆饼创建与统一设置标题位置
可以看到图表界面显示有5个圆饼图,点击界面两个按钮可以分别设置数据标签显示位置。
以及五个圆饼图标题的显示位置。
下面是例程创建过程 。
首先创建基于MFC扩展库的单文档工程,class CMy123View : public CBCGPFormView。
在默认的对话框资源上添加一图片控件,修改ID为IDC_CHART,用于显示图表。
然后在视窗类中添加图表变量CBCGPChartCtrl m_wndChart;
以及虚函数Create用于初始化变量。
- inline double Rand (double dblStart, double dblFinish)
- {
- double minVal = min(dblStart, dblFinish);
- double maxVal = max(dblStart, dblFinish);
- return (maxVal - minVal) * (double)rand() / (RAND_MAX + 1) + minVal;
- }
- 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);
- CBCGPInfoTipOptions infoTipOptions;
- infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_Left;
- m_wndChart.EnableInfoTip(TRUE, &infoTipOptions);//显示提示文本;
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();//获取图表指针;
- pChart->SetChartType(BCGPChartPie);//图表类型;
- pChart->SetChartTitle(_T("多圆饼图"));//设置图表标题;
- pChart->SetSeriesShadow(true);//数据系列显示阴影;
- pChart->SetThemeOpacity(70);//图表透明度;
- //创建数据系列,添加数据;
- CString sName;
- int nTotalYears=5;
- for (int nYear = 0; nYear < nTotalYears; nYear++)
- {
- pChart->AddChartData(_T("产品 A"), Rand(10000, 50000), nYear);
- pChart->AddChartData(_T("产品 B"), Rand(10000, 50000), nYear);
- pChart->AddChartData(_T("产品 C"), Rand(10000, 50000), nYear);
- pChart->AddChartData(_T("产品 D"), Rand(10000, 50000), nYear);
- pChart->AddChartData(_T("产品 E"), Rand(10000, 50000), nYear);
- pChart->AddChartData(_T("产品 F"), Rand(10000, 50000), nYear);
- pChart->AddChartData(_T("产品 G"), Rand(10000, 50000), nYear);
- sName.Format(_T("第%d年"),nYear);
- pChart->SetSeriesName(sName, nYear);
- }
- // pChart->ShowDataLabels(true);//显示图表数据标签;
- //添加添加到布局管理器统一管理布局;
- 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;
- }
复制代码 这样就简单快速 的创建了圆饼图表,最后是添加两个按钮控件,设置图表标签与标题位置。
- void CMy123View::OnBnClickedButton1()
- {
- static int nIndex=0;
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- ASSERT_VALID(pChart);
- if(nIndex<5)
- {
- pChart->ShowDataLabels(true);
- BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
- dataLabelOptions.m_position = (BCGPChartDataLabelOptions::LabelPosition)nIndex;
- dataLabelOptions.m_bUnderlineDataLabel = TRUE;
- dataLabelOptions.m_bDrawDataLabelBorder = dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_DEFAULT_POS && dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_OUTSIDE_END;
- pChart->SetDataLabelsOptions(dataLabelOptions);
- }
- else
- {
- nIndex=-1;
- pChart->ShowDataLabels(false);
- }
- nIndex++;
- pChart->Redraw();
- }
- void CMy123View::OnBnClickedButton2()
- {
- static int nIndex=0;
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- ASSERT_VALID(pChart);
- BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
- dataLabelOptions.m_content = BCGPChartDataLabelOptions::LC_PERCENTAGE;//开启圆饼图爆炸显示;
- pChart->SetDataLabelsOptions(dataLabelOptions);
- for (int i = 0; i < pChart->GetSeriesCount(); i++)
- {
- CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
- if (pSeries != NULL)
- {
- ASSERT_VALID(pSeries);
- pSeries->SetDefaultFillGradientType(CBCGPBrush::BCGP_GRADIENT_BEVEL);
- pSeries->SetPieExplosion(5);//爆炸显示比例设置;
- pSeries->SetDataPointPieExplosion(10, 0);
- pSeries->SetTileCaption((CBCGPChartPieSeries::BCGP_CHART_TILE_CAPTION_POSITION)nIndex);
- }
- }
- pChart->Redraw();
- nIndex++;
- nIndex = nIndex>2? 0:nIndex;
- }
复制代码 例程是基于MFC扩展库实现,可以网站内搜索下载。
例程源代码下载地址:
|