QQ登录

只需一步,快速开始

MFC扩展编程实例圆饼图实现分区合并显示

[ 复制链接 ]
MFC扩展编程实例圆饼图实现分区合并显示

当前例程实现将圆饼图过小的分区合并显示的功能,效果如下图。

MFC扩展编程实例圆饼图实现分区合并显示

MFC扩展编程实例圆饼图实现分区合并显示

例程界面有很多过小的分区,让界面杂乱难懂,我们可以通过按钮设置。
将在指定比例以下的全部分区合并为单一的分区显示。

下面是例程实现过程。
先创建基于单文档工程,class CMy123View : public CBCGPFormView。
并在默认对话框资源上添加一图片控件,ID修改为IDC_CHART,用于显示图表。

然后在视窗类中添加图表变量        CBCGPChartCtrl m_wndChart;
以及虚函数Create来初始化图表。
  1. BOOL CMy123View::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
  2. {
  3.         BOOL bRst = CBCGPFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);;
  4.         //图表初始化;
  5.         m_wndChart.SubclassDlgItem(IDC_CHART,this);       
  6.         CBCGPInfoTipOptions infoTipOptions;
  7.         infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_Left;
  8.         m_wndChart.EnableInfoTip(TRUE, &infoTipOptions);//显示提示文本;
  9.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();//获取图表指针;
  10.         pChart->SetChartType(BCGPChartPie);//图表类型;
  11.         pChart->SetChartTitle(_T("圆饼图小分区合并"));//设置图表标题;
  12.         pChart->SetSeriesShadow(true);//数据系列显示阴影;
  13.         //创建一数据系列,添加数据;
  14.         pChart->AddChartData(_T("苹果"), 200);
  15.         pChart->AddChartData(_T("桔子"), 5);
  16.         pChart->AddChartData(_T("番茄;"), 100);
  17.         pChart->AddChartData(_T("葡萄"), 15);
  18.         pChart->AddChartData(_T("洋葱"), 4);
  19.         pChart->AddChartData(_T("甜瓜"), 300);
  20.         pChart->AddChartData(_T("黄瓜"), 50);
  21.         pChart->AddChartData(_T("樱桃"), 20);
  22.         pChart->AddChartData(_T("土豆"), 150);
  23.         pChart->AddChartData(_T("卷心菜"), 250);
  24.         pChart->AddChartData(_T("山莓"), 8);
  25.         pChart->AddChartData(_T("草莓"), 7);
  26.         pChart->AddChartData(_T("西瓜"), 3);
  27.         ////设置数据标签属性;
  28.         pChart->ShowDataLabels();
  29.         BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
  30.         dataLabelOptions.m_bUnderlineDataLabel = TRUE;
  31.         dataLabelOptions.m_bDrawDataLabelBorder = FALSE;
  32.         pChart->SetDataLabelsOptions(dataLabelOptions);
  33.         //添加到布局管理器统一管理布局;
  34.         if (GetLayout() == NULL)
  35.                 return bRst;
  36.         CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
  37.         if (pLayout == NULL)
  38.                 return bRst;
  39.         pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
  40.         //
  41.         return bRst;
  42. }
复制代码


最后就是添加一按钮控件,实现将小于比例的分区合并。
  1. void CMy123View::OnBnClickedButton1()
  2. {
  3.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  4.         ASSERT_VALID(pChart);
  5.         static bool bMerge=true;//是否合并分区;
  6.         static int nPercentToMerge = 5;//小于此百分比分区进行合并;
  7.         bool bShowCustomLabel = true;//显示显示自定义标签名;
  8.         CString sCustomLabelName;
  9.         sCustomLabelName.Format(_T("Others: < %d%%"), nPercentToMerge);
  10.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  11.         {
  12.                 CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
  13.                 ASSERT_VALID(pSeries);
  14.                 //关键函数,参数分别表示,
  15.                 //是否合并分区,
  16.                 //小于多少百分比的分区合并,
  17.                 //合并后的图表分区是否在图例上同步更新;
  18.                 //合并后分区在图例显示的标签名;
  19.                 pSeries->SetGroupSmallerSlices(bMerge, (double)nPercentToMerge, true, sCustomLabelName);
  20.                 pSeries->SetDefaultFillGradientType(CBCGPBrush::BCGP_GRADIENT_BEVEL);
  21.         }
  22.         pChart->Redraw();
  23.         //
  24.         nPercentToMerge+=5;
  25.         nPercentToMerge = nPercentToMerge>20?0:nPercentToMerge;
  26.         bMerge = nPercentToMerge == 0?false:true;
  27. }
复制代码
例程是基于MFC扩展库实现的,可以在网站内搜索下载。
例程源代码下载地址:
游客,为过滤非法行为,全站隐藏资源仅对充值会员开放进入升级

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  

  

上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例

  

经历1年的编程与录制点击进入查看



回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索