QQ登录

只需一步,快速开始

MFC扩展编程实例圆环嵌套图表创建与标签位置设置

[ 复制链接 ]
MFC扩展编程实例圆环嵌套图表创建与标签位置设置

当前例程创建一个圆环的嵌套类型的图表,并可以点击界面按钮设置其标签位置,效果如下图。
2020-02-13_151910.jpg
例程是基于一套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.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  7.         pChart->SetChartType(BCGPChartDoughnutNested);//圆环嵌套图表类型;
  8.         pChart->SetThemeOpacity(70);//图表透明度;
  9.         int nTotalYears = 3;
  10.         CString sName;
  11.         //创建数据系列,添加数据;
  12.         for (int nYear = 0; nYear < nTotalYears; nYear++)
  13.         {
  14.                 pChart->AddChartData(_T("产品 A"), Rand(10000, 50000), nYear);
  15.                 pChart->AddChartData(_T("产品 B"), Rand(10000, 50000), nYear);
  16.                 pChart->AddChartData(_T("产品 C"), Rand(10000, 50000), nYear);
  17.                 pChart->AddChartData(_T("产品 D"), Rand(10000, 50000), nYear);
  18.                 pChart->AddChartData(_T("产品 E"), Rand(10000, 50000), nYear);
  19.                 pChart->AddChartData(_T("产品 F"), Rand(10000, 50000), nYear);
  20.                 pChart->AddChartData(_T("产品 G"), Rand(10000, 50000), nYear);
  21.                 sName.Format(_T("第 %d年"),nTotalYears - nYear - 1);
  22.                 pChart->SetSeriesName(sName, nYear);
  23.         }
  24.         //添加添加到布局管理器统一管理布局;
  25.         if (GetLayout() == NULL)
  26.                 return bRst;
  27.         CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
  28.         if (pLayout == NULL)
  29.                 return bRst;
  30.         pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
  31.         //
  32.         return bRst;
  33. }
复制代码
  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. }
复制代码
这样就简单快速的创建了圆环嵌套图表,关键代码是设置图表的类型。
pChart->SetChartType(BCGPChartDoughnutNested);//圆环嵌套图表类型;


最后是添加按钮控件,调车图表标签属性。
  1. void CMy123View::OnBnClickedButton1()
  2. {
  3.         static int nIndex=0;
  4.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  5.         ASSERT_VALID(pChart);
  6.         BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
  7.         dataLabelOptions.m_position = (BCGPChartDataLabelOptions::LabelPosition)nIndex;//标签位置;
  8.         dataLabelOptions.m_bUnderlineDataLabel = TRUE;
  9.         dataLabelOptions.m_bDrawDataLabelBorder = \
  10.                 dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_DEFAULT_POS \
  11.                 && dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_OUTSIDE_END;
  12.         dataLabelOptions.m_content = BCGPChartDataLabelOptions::LC_PERCENTAGE;
  13.         pChart->SetDataLabelsOptions(dataLabelOptions);
  14.         //
  15.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  16.         {
  17.                 CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
  18.                 ASSERT_VALID(pSeries);
  19.                 pSeries->SetDefaultFillGradientType(CBCGPBrush::BCGP_GRADIENT_BEVEL);//设置渐变模式;
  20.                 pSeries->SetTileCaption(CBCGPChartPieSeries::CHART_TILE_POSITION_TOP);
  21.                 CBCGPChartDoughnutSeries* pDoughnutSeries = DYNAMIC_DOWNCAST(CBCGPChartDoughnutSeries, pSeries);
  22.                 ASSERT_VALID(pDoughnutSeries);
  23.                 pDoughnutSeries->SetDoughnutPercent(30);
  24.         }
  25.         nIndex++;
  26.         if(nIndex>4)
  27.                 pChart->ShowDataLabels(false);//隐藏数据标签;
  28.         else
  29.                 pChart->ShowDataLabels(true);
  30.         pChart->Redraw();
  31.         //       
  32.         nIndex = nIndex>4?0:nIndex;
  33. }
复制代码
例程源代码下载地址:
游客,为过滤非法行为,全站隐藏资源仅对充值会员开放进入升级

  

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

  

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

  

QQ联系我

微信扫扫联系我

  

  

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

  

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



回复

使用道具 举报

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