QQ登录

只需一步,快速开始

MFC扩展编程实例多个圆饼创建与统一设置标题位置

[ 复制链接 ]
MFC扩展编程实例多个圆饼创建与统一设置标题位置

当前例程实现在一个图表中创建显示多个圆饼图功能,并可以统一设置这些圆饼图的标题位置。
效果如下图。

MFC扩展编程实例多个圆饼创建与统一设置标题位置

MFC扩展编程实例多个圆饼创建与统一设置标题位置


可以看到图表界面显示有5个圆饼图,点击界面两个按钮可以分别设置数据标签显示位置。
以及五个圆饼图标题的显示位置。
下面是例程创建过程 。
首先创建基于MFC扩展库的单文档工程,class CMy123View : public CBCGPFormView。
在默认的对话框资源上添加一图片控件,修改ID为IDC_CHART,用于显示图表。

然后在视窗类中添加图表变量CBCGPChartCtrl m_wndChart;
以及虚函数Create用于初始化变量。
  1. inline double Rand (double dblStart, double dblFinish)
  2. {
  3.         double minVal = min(dblStart, dblFinish);
  4.         double maxVal = max(dblStart, dblFinish);
  5.         return (maxVal - minVal) * (double)rand() / (RAND_MAX + 1) + minVal;
  6. }
  7. BOOL CMy123View::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
  8. {
  9.         BOOL bRst = CBCGPFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);;
  10.         //图表初始化;
  11.         m_wndChart.SubclassDlgItem(IDC_CHART,this);       
  12.         CBCGPInfoTipOptions infoTipOptions;
  13.         infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_Left;
  14.         m_wndChart.EnableInfoTip(TRUE, &infoTipOptions);//显示提示文本;
  15.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();//获取图表指针;
  16.         pChart->SetChartType(BCGPChartPie);//图表类型;
  17.         pChart->SetChartTitle(_T("多圆饼图"));//设置图表标题;
  18.         pChart->SetSeriesShadow(true);//数据系列显示阴影;
  19.         pChart->SetThemeOpacity(70);//图表透明度;
  20.         //创建数据系列,添加数据;
  21.         CString sName;
  22.         int nTotalYears=5;
  23.         for (int nYear = 0; nYear < nTotalYears; nYear++)
  24.         {
  25.                 pChart->AddChartData(_T("产品 A"), Rand(10000, 50000), nYear);
  26.                 pChart->AddChartData(_T("产品 B"), Rand(10000, 50000), nYear);
  27.                 pChart->AddChartData(_T("产品 C"), Rand(10000, 50000), nYear);
  28.                 pChart->AddChartData(_T("产品 D"), Rand(10000, 50000), nYear);
  29.                 pChart->AddChartData(_T("产品 E"), Rand(10000, 50000), nYear);
  30.                 pChart->AddChartData(_T("产品 F"), Rand(10000, 50000), nYear);
  31.                 pChart->AddChartData(_T("产品 G"), Rand(10000, 50000), nYear);
  32.                 sName.Format(_T("第%d年"),nYear);
  33.                 pChart->SetSeriesName(sName, nYear);
  34.         }
  35. //        pChart->ShowDataLabels(true);//显示图表数据标签;
  36.         //添加添加到布局管理器统一管理布局;
  37.         if (GetLayout() == NULL)
  38.                 return bRst;
  39.         CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
  40.         if (pLayout == NULL)
  41.                 return bRst;
  42.         pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
  43.         //
  44.         return bRst;
  45. }
复制代码
这样就简单快速 的创建了圆饼图表,最后是添加两个按钮控件,设置图表标签与标题位置。
  1. void CMy123View::OnBnClickedButton1()
  2. {
  3.         static int nIndex=0;
  4.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  5.         ASSERT_VALID(pChart);
  6.         if(nIndex<5)
  7.         {
  8.                 pChart->ShowDataLabels(true);
  9.                 BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
  10.                 dataLabelOptions.m_position = (BCGPChartDataLabelOptions::LabelPosition)nIndex;
  11.                 dataLabelOptions.m_bUnderlineDataLabel = TRUE;
  12.                 dataLabelOptions.m_bDrawDataLabelBorder = dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_DEFAULT_POS && dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_OUTSIDE_END;
  13.                 pChart->SetDataLabelsOptions(dataLabelOptions);
  14.         }
  15.         else
  16.         {
  17.                 nIndex=-1;
  18.                 pChart->ShowDataLabels(false);
  19.         }
  20.         nIndex++;
  21.         pChart->Redraw();
  22. }


  23. void CMy123View::OnBnClickedButton2()
  24. {
  25.         static int nIndex=0;
  26.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  27.         ASSERT_VALID(pChart);
  28.         BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
  29.         dataLabelOptions.m_content = BCGPChartDataLabelOptions::LC_PERCENTAGE;//开启圆饼图爆炸显示;
  30.         pChart->SetDataLabelsOptions(dataLabelOptions);
  31.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  32.         {
  33.                 CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
  34.                 if (pSeries != NULL)
  35.                 {
  36.                         ASSERT_VALID(pSeries);
  37.                         pSeries->SetDefaultFillGradientType(CBCGPBrush::BCGP_GRADIENT_BEVEL);               
  38.                         pSeries->SetPieExplosion(5);//爆炸显示比例设置;
  39.                         pSeries->SetDataPointPieExplosion(10, 0);
  40.                         pSeries->SetTileCaption((CBCGPChartPieSeries::BCGP_CHART_TILE_CAPTION_POSITION)nIndex);
  41.                 }
  42.         }
  43.         pChart->Redraw();
  44.         nIndex++;
  45.         nIndex = nIndex>2? 0:nIndex;
  46. }
复制代码
例程是基于MFC扩展库实现,可以网站内搜索下载。
例程源代码下载地址:
游客,为过滤非法行为,全站隐藏资源仅对充值会员开放进入升级

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索