扫一扫,访问微社区

QQ登录

只需一步,快速开始

MFC扩展编程实例2D3D漏斗图表标签与颈部高设置

[ 复制链接 ]
MFC扩展编程实例2D3D漏斗图表标签与颈部高设置

当前例程实现二维与三维的漏斗图表创建,设置标签显示位置,
颈部调度设置等,效果如下图。
2020-02-15_160523.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.         CBCGPInfoTipOptions infoTipOptions;
  7.         infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_Left;
  8.         m_wndChart.EnableInfoTip(TRUE, &infoTipOptions);//显示提示文本;
  9.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();//获取图表指针;
  10.         //BCGPChartFunnel3D,BCGPChartFunnel//二维,三维漏斗图表;
  11.         pChart->SetChartType(BCGPChartFunnel3D);//
  12.         pChart->SetChartTitle(_T("漏斗图表"));//设置图表标题;
  13.         pChart->SetSeriesShadow(true);//数据系列显示阴影;
  14.         //创建一数据系列,添加数据;
  15.         pChart->AddChartData(_T("工控编程吧"), 6700);
  16.         pChart->AddChartData(_T("头条"), 4500);
  17.         pChart->AddChartData(_T("百度"), 2200);
  18.         pChart->AddChartData(_T("微信"), 1500);
  19.         pChart->AddChartData(_T("微博"), 1400);
  20.         pChart->AddChartData(_T("阿里"), 1350);
  21.         pChart->AddChartData(_T("其他"), 1700);
  22.         //添加添加到布局管理器统一管理布局;
  23.         if (GetLayout() == NULL)
  24.                 return bRst;
  25.         CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
  26.         if (pLayout == NULL)
  27.                 return bRst;
  28.         pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
  29.         //
  30.         return bRst;
  31. }
复制代码
最后就是添加三个按钮,关联点击函数,用于实现对应图表属性设置。
  1. void CMy123View::OnBnClickedButton1()
  2. {
  3.         static bool bShowLabel=true;//是否显示标签;
  4.         static int  nLabelPos=0;//标签位置;
  5.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  6.         ASSERT_VALID(pChart);
  7.         pChart->ShowDataLabels(bShowLabel);//显示标签;
  8.         if (bShowLabel)
  9.         {
  10.                 BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
  11.                 switch (nLabelPos)
  12.                 {
  13.                 case 0:
  14.                         dataLabelOptions.m_position = BCGPChartDataLabelOptions::LP_DEFAULT_POS;
  15.                         break;

  16.                 case 1:
  17.                         dataLabelOptions.m_position = BCGPChartDataLabelOptions::LP_OUTSIDE_END;
  18.                         dataLabelOptions.m_dblAngle = -90;
  19.                         break;

  20.                 case 2:
  21.                         dataLabelOptions.m_position = BCGPChartDataLabelOptions::LP_OUTSIDE_END;
  22.                         dataLabelOptions.m_dblAngle = 90;
  23.                         break;

  24.                 case 3:
  25.                         dataLabelOptions.m_position = BCGPChartDataLabelOptions::LP_CENTER;
  26.                         break;
  27.                 }
  28.                 pChart->SetDataLabelsOptions(dataLabelOptions);
  29.         }

  30.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  31.         {
  32.                 CBCGPChartPyramidSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPyramidSeries, pChart->GetSeries(i));
  33.                 ASSERT_VALID(pSeries);
  34.                 pSeries->m_bDataLabelsInColumns = true;
  35.                 pSeries->SetGap(25);//金字塔每层间隔;
  36.         }
  37.         pChart->SetThemeOpacity(70);//设置透明度;
  38.         pChart->Redraw();
  39.         //
  40.         nLabelPos++;
  41.         nLabelPos = nLabelPos>3?0:nLabelPos;
  42. }
  43. void CMy123View::OnBnClickedButton2()
  44. {
  45.         static bool b3D=false;
  46.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  47.         ASSERT_VALID(pChart);
  48.         BCGPChartCategory type = b3D?BCGPChartFunnel3D:BCGPChartFunnel;
  49.         pChart->SetChartType(type);
  50.         pChart->Redraw();
  51.         b3D = !b3D;
  52. }
  53. void CMy123View::OnBnClickedButton3()
  54. {
  55.         static bool bByPercent=false;
  56.         static int nIndex=1;
  57.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  58.         ASSERT_VALID(pChart);

  59.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  60.         {
  61.                 CBCGPChartFunnelSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartFunnelSeries, pChart->GetSeries(i));
  62.                 ASSERT_VALID(pSeries);
  63.                 if (bByPercent)
  64.                 {
  65.                         int nPercent = nIndex*20;
  66.                         pSeries->SetNeckHeightInPercents(nPercent);
  67.                         bByPercent = nIndex==5?false:true;
  68.                 }
  69.                 else
  70.                 {
  71.                         double dbHeightValue = nIndex*1000;
  72.                         pSeries->SetNeckHeightInChartValues(dbHeightValue);
  73.                         bByPercent = nIndex==5?true:false;
  74.                 }
  75.         }
  76.         pChart->SetDirty(TRUE,TRUE);
  77.         //
  78.         nIndex++;
  79.         nIndex = nIndex>5?1:nIndex;
  80. }
复制代码
例程使用到的MFC扩展库可以网站搜索下载。
例程源代码下载地址:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:38.MFC扩展编程实例2D3D漏斗图表标签与颈部高设置.rar 
文件大小:80.9 KB  售价:3金币
下载权限: 不限 以上或 VIP会员   [购买VIP]   [充值积分]   有问题联系我


  

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

  

如果您着急,可红包后,发您资料!

  

QQ联系我

微信扫扫联系我

  

  

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

  

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



回复

使用道具 举报

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