QQ登录

只需一步,快速开始

MFC扩展编程实例2D簇状柱形图设置标签位置与渐变样式

[ 复制链接 ]
MFC扩展编程实例2D簇状柱形图设置标签位置与渐变样式

我们知道图表有很多类型,如二维的柱形图,柱形图又细分有簇状的,叠加的,并列叠加等等。
还有三维类型的图表,这里实现常用图表的创建与标签,渐变样式设置。
效果如下图:

MFC扩展编程实例2D簇状柱形图设置标签位置与渐变样式

MFC扩展编程实例2D簇状柱形图设置标签位置与渐变样式


例程界面显示的为二维簇状柱形图,图表显示有四个数据系列,4个为一簇,每个系列以柱形显示。
界面上两个按钮对应实现图表数据标签位置设置,显示隐藏及数据系列填充的渐变样式设置。
例程使用的扩展库可以搜索BCGP下载使用。
下面是例程关键代码与实现过程。
首先创建基于CBCGPFormView的单文档工程,并添加变量CBCGPChartCtrl m_wndChart,
及虚函数Create,在函数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.         BCGPChartCategory category = BCGPChartColumn;//图表种类,F12查看全部;
  8.         BCGPChartType type = BCGP_CT_SIMPLE;//图表类型,按F12查看全部;
  9.         pChart->SetChartType(category, type);//设置图表类别;
  10.         pChart->SetChartTitle(_T("2D簇状柱形图"));
  11.         CBCGPChartBarSeries* pBarSeries1 = DYNAMIC_DOWNCAST(CBCGPChartBarSeries, pChart->CreateSeries(_T("能源")));
  12.         CBCGPChartBarSeries* pBarSeries2 = DYNAMIC_DOWNCAST(CBCGPChartBarSeries, pChart->CreateSeries(_T("税收")));
  13.         CBCGPChartBarSeries* pBarSeries3 = DYNAMIC_DOWNCAST(CBCGPChartBarSeries, pChart->CreateSeries(_T("维护")));
  14.         CBCGPChartBarSeries* pBarSeries4 = DYNAMIC_DOWNCAST(CBCGPChartBarSeries, pChart->CreateSeries(_T("其他")));
  15.         //向四个数据系列添加数据;
  16.         srand((unsigned)time(NULL));
  17.         COleDateTime now = COleDateTime::GetCurrentTime();
  18.         CString sYear;
  19.         for(int i=5;i>0;i--)
  20.         {
  21.                 sYear.Format(_T("%d"), now.GetYear() - i);
  22.                 pBarSeries1->AddDataPoint(sYear, rand()%20+1);
  23.         }

  24.         pBarSeries2->AddDataPoint(10);
  25.         pBarSeries2->AddDataPoint(12);
  26.         pBarSeries2->AddDataPoint(15);
  27.         pBarSeries2->AddDataPoint(17);
  28.         pBarSeries2->AddDataPoint(12);

  29.         pBarSeries3->AddDataPoint(5);
  30.         pBarSeries3->AddDataPoint(7);
  31.         pBarSeries3->AddDataPoint(11);
  32.         pBarSeries3->AddDataPoint(14);
  33.         pBarSeries3->AddDataPoint(19);

  34.         pBarSeries4->AddDataPoint(2);
  35.         pBarSeries4->AddDataPoint(3);
  36.         pBarSeries4->AddDataPoint(5);
  37.         pBarSeries4->AddDataPoint(3);
  38.         pBarSeries4->AddDataPoint(2);

  39.         //添加添加到布局管理器统一管理布局;
  40.         if (GetLayout() == NULL)
  41.                 return bRst;
  42.         CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
  43.         if (pLayout == NULL)
  44.                 return bRst;
  45.         pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
  46.         //
  47.         return bRst;
  48. }
复制代码
图表种类与类别有很多,对应是调用函数SetChartType来设置。
二维簇状柱形图对应种类,类别为下面代码表示。
BCGPChartCategory category = BCGPChartColumn;//图表种类,F12查看全部;
BCGPChartType type = BCGP_CT_SIMPLE;//图表类型,按F12查看全部;pChart->SetChartType(category, type);//设置图表类别;
代码中使用了界面布局管理器,所以请在视窗类构造函数中开启EnableLayout();
代码中还使用了一个图片控件ID,所以请在视窗对话框资源中添加图片控件,修改ID为IDC_CHART。


然后就是数据标签位置的设置与标签显示隐藏,
对应按钮点击函数如下:

  1. void CMy123View::OnBnClickedButton1()//图表修改数据标签位置;
  2. {
  3.         static int nPos=0;
  4.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  5.         //数据标签位置有如下几种设置;
  6.         //enum LabelPosition
  7.         //{
  8.         //        LP_DEFAULT_POS,//0
  9.         //        LP_CENTER,//1
  10.         //        LP_INSIDE_END,
  11.         //        LP_INSIDE_BASE,
  12.         //        LP_OUTSIDE_END
  13.         //};
  14.         if(nPos == -1)
  15.                 pChart->ShowDataLabels(false);
  16.         else
  17.         {
  18.                 pChart->ShowDataLabels(true);
  19.                 BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
  20.                 dataLabelOptions.m_position = (BCGPChartDataLabelOptions::LabelPosition)nPos;
  21.                 pChart->SetDataLabelsOptions(dataLabelOptions);
  22.         }
  23.         pChart->Redraw();
  24.         //
  25.         nPos++;
  26.         nPos=nPos>4?-1:nPos;
  27. }
复制代码

可以看到数据标签显示隐藏可以调用图表函数ShowDataLabels实现,数据标签位置设置是调用图表函数SetDataLabelsOptions实现。
位置设置是通过枚举类型enum LabelPosition选择,如代码所示。


最后就是图表的数据系列填充渐变颜色的设置,
对应设置按钮点击函数如下:
  1. void CMy123View::OnBnClickedButton2()
  2. {
  3.         //渐变为枚举类型,有以下供选择使用;
  4.         //enum BCGP_GRADIENT_TYPE
  5.         //{
  6.         //        BCGP_GRADIENT_TYPE_FIRST          = 0,
  7.         //        BCGP_NO_GRADIENT                  = BCGP_GRADIENT_TYPE_FIRST,
  8.         //        BCGP_GRADIENT_HORIZONTAL          = 1,
  9.         //        BCGP_GRADIENT_VERTICAL            = 2,
  10.         //        BCGP_GRADIENT_DIAGONAL_LEFT       = 3,
  11.         //        BCGP_GRADIENT_DIAGONAL_RIGHT      = 4,
  12.         //        BCGP_GRADIENT_CENTER_HORIZONTAL   = 5,
  13.         //        BCGP_GRADIENT_CENTER_VERTICAL     = 6,
  14.         //        BCGP_GRADIENT_RADIAL_TOP          = 7,
  15.         //        BCGP_GRADIENT_RADIAL_CENTER       = 8,
  16.         //        BCGP_GRADIENT_RADIAL_BOTTOM       = 9,
  17.         //        BCGP_GRADIENT_RADIAL_LEFT         = 10,
  18.         //        BCGP_GRADIENT_RADIAL_RIGHT        = 11,
  19.         //        BCGP_GRADIENT_RADIAL_TOP_LEFT     = 12,
  20.         //        BCGP_GRADIENT_RADIAL_TOP_RIGHT    = 13,
  21.         //        BCGP_GRADIENT_RADIAL_BOTTOM_LEFT  = 14,
  22.         //        BCGP_GRADIENT_RADIAL_BOTTOM_RIGHT = 15,
  23.         //        BCGP_GRADIENT_BEVEL               = 16,
  24.         //        BCGP_GRADIENT_PIPE_VERTICAL       = 17,
  25.         //        BCGP_GRADIENT_PIPE_HORIZONTAL     = 18,
  26.         //        BCGP_GRADIENT_TYPE_LAST           = BCGP_GRADIENT_PIPE_HORIZONTAL
  27.         //};
  28.         static int nType=-1;//-1为恢复缺省渐变,0为不使用渐变;
  29.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  30.         CBCGPBrush::BCGP_GRADIENT_TYPE type = (CBCGPBrush::BCGP_GRADIENT_TYPE)nType;
  31.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  32.         {
  33.                 CBCGPChartSeries* pSeries = pChart->GetSeries(i);
  34.                 pSeries->SetDefaultFillGradientType(type);
  35.         }
  36.         pChart->Redraw();
  37.         //
  38.         nType++;
  39.         nType=nType>18?-1:nType;
  40. }
复制代码
图表数据系列填充颜色由数据系列成员函数SetDefaultFillGradientType设置。
渐变类型也是枚举类型enum BCGP_GRADIENT_TYPE,其中BCGP_NO_GRADIENT表示不使用渐变。
例程其他细节可以下载源代码学习.
例程源代码下载:
请点击此处下载

查看状态:已购买或有权限

您的用户组是:游客

文件名称:13.MFC扩展编程实例2D簇状柱形图设置标签位置与渐变样式.rar 
文件大小:81.45 KB 
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

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

  

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

  

QQ联系我

微信扫扫联系我

  



回复

使用道具 举报

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