QQ登录

只需一步,快速开始

MFC扩展编程实例2D3D金字塔图表创建与标签位置设置

[ 复制链接 ]
MFC扩展编程实例2D3D金字塔图表创建与标签位置设置

当前例程实现二维与三维图表的创建,可以通过按钮来回切换。
标签的显示角度也可以设置,还可以旋转三维的图表。
效果如下图。

MFC扩展编程实例2D3D金字塔图表创建与标签位置设置

MFC扩展编程实例2D3D金字塔图表创建与标签位置设置

例程界面有一旋转控件可以左右,上下旋转三维类型的图表。
图表的类型也可以点击控件切换,
图表的标签也可以左中右切换显示。

下面是例程实现过程介绍。
先创建基于MFC扩展库的单文档工程,class CMy123View : public CBCGPFormView。
在默认的对话框资源上添加两图片控件IDC_CHART,IDC_ROTATE用于显示,旋转图表。

在视窗类添加变量
        CBCGPRotationCtrl        m_wndRotate;
        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_wndRotate.SubclassDlgItem(IDC_ROTATE,this);
  6.         CBCGPRotationObject* pRO = m_wndRotate.GetRotationObject();
  7.         ASSERT_VALID(pRO);
  8.         pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_CLOCKWISE, FALSE);
  9.         pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_NARROW_FIELD_OF_VIEW, FALSE);
  10.         pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_WIDEN_FIELD_OF_VIEW, FALSE);
  11.         pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_COUNTER_CLOCKWISE, FALSE);
  12.         pRO->SetAutorepeatMode(100);
  13.         pRO->SetColorTheme(CBCGPRotationObject::BCGP_COLOR_THEME_VISUAL_MANAGER);
  14.         pRO->EnableFlatIcons();
  15.         //图表初始化;
  16.         m_wndChart.SubclassDlgItem(IDC_CHART,this);       
  17.         CBCGPInfoTipOptions infoTipOptions;
  18.         infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_Left;
  19.         m_wndChart.EnableInfoTip(TRUE, &infoTipOptions);//显示提示文本;
  20.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();//获取图表指针;
  21.         //BCGPChartPyramid3D,BCGPChartPyramid//二维,三维金字塔图表;
  22.         pChart->SetChartType(BCGPChartPyramid3D);//
  23.         pChart->SetChartTitle(_T("金字塔图表"));//设置图表标题;
  24.         pChart->SetSeriesShadow(true);//数据系列显示阴影;
  25.         //创建一数据系列,添加数据;
  26.         pChart->AddChartData(_T("工控编程吧"), 6700);
  27.         pChart->AddChartData(_T("头条"), 4500);
  28.         pChart->AddChartData(_T("百度"), 2200);
  29.         pChart->AddChartData(_T("微信"), 1500);
  30.         pChart->AddChartData(_T("微博"), 1400);
  31.         pChart->AddChartData(_T("阿里"), 1350);
  32.         pChart->AddChartData(_T("其他"), 1700);
  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::OnRotate()
  2. {
  3.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  4.         ASSERT_VALID(pChart);

  5.         double xDelta = 10;
  6.         int    yDelta = 5;
  7.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  8.         {
  9.                 CBCGPChartPyramidSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPyramidSeries, pChart->GetSeries(i));
  10.                 ASSERT_VALID(pSeries);

  11.                 double nRotationAngle = pSeries->GetRotation();
  12.                 int nDepth = pSeries->GetDepthPercent();

  13.                 switch (m_wndRotate.GetRotationObject()->GetClicked())
  14.                 {
  15.                 case CBCGPRotationObject::BCGP_ROTATION_UP:
  16.                         nDepth -= yDelta;
  17.                         break;

  18.                 case CBCGPRotationObject::BCGP_ROTATION_DOWN:
  19.                         nDepth += yDelta;
  20.                         break;

  21.                 case CBCGPRotationObject::BCGP_ROTATION_LEFT:
  22.                         nRotationAngle -= xDelta;
  23.                         break;

  24.                 case CBCGPRotationObject::BCGP_ROTATION_RIGHT:
  25.                         nRotationAngle += xDelta;
  26.                         break;

  27.                 case CBCGPRotationObject::BCGP_ROTATION_RESET:
  28.                         nRotationAngle = 0;
  29.                         nDepth = 10;
  30.                         break;
  31.                 }
  32.                 pSeries->SetRotation(nRotationAngle);
  33.                 pSeries->SetDepthPercent(nDepth);
  34.         }
  35.         pChart->Redraw();
  36. }
复制代码
最后就是标签设置与图表类型切换按钮实现。
  1. void CMy123View::OnBnClickedButton1()
  2. {
  3.         static bool bShowLabel=true;//是否显示标签;
  4.         static int  nLabelPos=0;//标签位置;
  5.         static bool bCircleType=false;//圆形样式;
  6.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  7.         ASSERT_VALID(pChart);
  8.         pChart->ShowDataLabels(bShowLabel);//显示标签;
  9.         bCircleType = pChart->GetChartCategory()==BCGPChartPyramid3D?true:false;
  10.         if (bShowLabel)
  11.         {
  12.                 BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
  13.                 switch (nLabelPos)
  14.                 {
  15.                 case 0:
  16.                         dataLabelOptions.m_position = BCGPChartDataLabelOptions::LP_DEFAULT_POS;
  17.                         break;

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

  22.                 case 2:
  23.                         dataLabelOptions.m_position = BCGPChartDataLabelOptions::LP_OUTSIDE_END;
  24.                         dataLabelOptions.m_dblAngle = 90;
  25.                         break;

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

  32.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  33.         {
  34.                 CBCGPChartPyramidSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPyramidSeries, pChart->GetSeries(i));
  35.                 ASSERT_VALID(pSeries);

  36.                 pSeries->SetCircularBase(bCircleType);//方形,圆形样式;
  37.                 pSeries->m_bDataLabelsInColumns = true;
  38.                 pSeries->SetGap(25);//金字塔每层间隔;
  39.         }
  40.         pChart->SetThemeOpacity(70);//设置透明度;
  41.         pChart->Redraw();
  42.         //
  43.         nLabelPos++;
  44.         nLabelPos = nLabelPos>3?0:nLabelPos;
  45. }


  46. void CMy123View::OnBnClickedButton2()
  47. {
  48.         static bool b3D=false;
  49.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  50.         ASSERT_VALID(pChart);
  51.         BCGPChartCategory type = b3D?BCGPChartPyramid3D:BCGPChartPyramid;
  52.         pChart->SetChartType(type);
  53.         pChart->Redraw();
  54.         b3D = !b3D;
  55. }
复制代码
例程有用到MFC扩展库,可以网站搜索下载。
例程源代码下载地址:
请点击此处下载

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

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

文件名称:37.MFC扩展编程实例2D3D金字塔图表创建与标签位置设置.rar 
文件大小:81.62 KB  售价:3金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

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

  

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

  

QQ联系我

微信扫扫联系我

  

  

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

  

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



回复

使用道具 举报

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