MFC扩展编程实例圆饼图实现分区合并显示
当前例程实现将圆饼图过小的分区合并显示的功能,效果如下图。
MFC扩展编程实例圆饼图实现分区合并显示
例程界面有很多过小的分区,让界面杂乱难懂,我们可以通过按钮设置。
将在指定比例以下的全部分区合并为单一的分区显示。
下面是例程实现过程。
先创建基于单文档工程,class CMy123View : public CBCGPFormView。
并在默认对话框资源上添加一图片控件,ID修改为IDC_CHART,用于显示图表。
然后在视窗类中添加图表变量 CBCGPChartCtrl m_wndChart;
以及虚函数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);
- 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->AddChartData(_T("苹果"), 200);
- pChart->AddChartData(_T("桔子"), 5);
- pChart->AddChartData(_T("番茄;"), 100);
- pChart->AddChartData(_T("葡萄"), 15);
- pChart->AddChartData(_T("洋葱"), 4);
- pChart->AddChartData(_T("甜瓜"), 300);
- pChart->AddChartData(_T("黄瓜"), 50);
- pChart->AddChartData(_T("樱桃"), 20);
- pChart->AddChartData(_T("土豆"), 150);
- pChart->AddChartData(_T("卷心菜"), 250);
- pChart->AddChartData(_T("山莓"), 8);
- pChart->AddChartData(_T("草莓"), 7);
- pChart->AddChartData(_T("西瓜"), 3);
- ////设置数据标签属性;
- pChart->ShowDataLabels();
- BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
- dataLabelOptions.m_bUnderlineDataLabel = TRUE;
- dataLabelOptions.m_bDrawDataLabelBorder = FALSE;
- pChart->SetDataLabelsOptions(dataLabelOptions);
- //添加到布局管理器统一管理布局;
- 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()
- {
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- ASSERT_VALID(pChart);
- static bool bMerge=true;//是否合并分区;
- static int nPercentToMerge = 5;//小于此百分比分区进行合并;
- bool bShowCustomLabel = true;//显示显示自定义标签名;
- CString sCustomLabelName;
- sCustomLabelName.Format(_T("Others: < %d%%"), nPercentToMerge);
- for (int i = 0; i < pChart->GetSeriesCount(); i++)
- {
- CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
- ASSERT_VALID(pSeries);
- //关键函数,参数分别表示,
- //是否合并分区,
- //小于多少百分比的分区合并,
- //合并后的图表分区是否在图例上同步更新;
- //合并后分区在图例显示的标签名;
- pSeries->SetGroupSmallerSlices(bMerge, (double)nPercentToMerge, true, sCustomLabelName);
- pSeries->SetDefaultFillGradientType(CBCGPBrush::BCGP_GRADIENT_BEVEL);
- }
- pChart->Redraw();
- //
- nPercentToMerge+=5;
- nPercentToMerge = nPercentToMerge>20?0:nPercentToMerge;
- bMerge = nPercentToMerge == 0?false:true;
- }
复制代码 例程是基于MFC扩展库实现的,可以在网站内搜索下载。
例程源代码下载地址:
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
|