QQ登录

只需一步,快速开始

MFC扩展编程实例2D簇状与叠加条形图创建并设置标签位置与渐变样式

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

当前例程可以创建二维的簇状条形图,叠加的带百分比叠加的条形图表。
不同类型的图表仅是创建图表时,一个函数参数不一样而已。
例程还可以对图表数据标签显示位置设置,数据系列渐变样式设置。
例程界面如下。

21.MFC扩展编程实例2D簇状与叠加条形图创建并设置标签位置与渐变样式

21.MFC扩展编程实例2D簇状与叠加条形图创建并设置标签位置与渐变样式

界面暂时显示的是二维簇状条形图表,可以点击界面的两按钮实现数据标签位置设置。
以及数据系列渐变样式设置。

下面是例程创建过程及关键代码。
创建基于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.         BCGPChartCategory category = BCGPChartBar;//图表种类,F12查看全部;
  8.         BCGPChartType type = BCGP_CT_SIMPLE;//BCGP_CT_STACKED ;//BCGP_CT_100STACKED;//图表类型,按F12查看全部;
  9.         pChart->SetChartType(category, type);//设置图表类别;
  10.         pChart->SetChartTitle(_T("2D簇状与叠加条形图"));
  11.         CBCGPChartSeries* pSeries1 = DYNAMIC_DOWNCAST(CBCGPChartSeries, pChart->CreateSeries(_T("能源")));
  12.         CBCGPChartSeries* pSeries2 = DYNAMIC_DOWNCAST(CBCGPChartSeries, pChart->CreateSeries(_T("税收")));
  13.         CBCGPChartSeries* pSeries3 = DYNAMIC_DOWNCAST(CBCGPChartSeries, pChart->CreateSeries(_T("维护")));
  14.         //向三个数据系列添加数据;
  15.         srand((unsigned)time(NULL));
  16.         COleDateTime now = COleDateTime::GetCurrentTime();
  17.         CString sYear;
  18.         for(int i=5;i>0;i--)
  19.         {
  20.                 sYear.Format(_T("%d"), now.GetYear() - i);
  21.                 pSeries1->AddDataPoint(sYear, rand()%20+1);
  22.         }

  23.         pSeries2->AddDataPoint(9.);
  24.         pSeries2->AddDataPoint(15.);
  25.         pSeries2->AddDataPoint(19.);
  26.         pSeries2->AddDataPoint(21.);
  27.         pSeries2->AddDataPoint(23.);

  28.         pSeries3->AddDataPoint(2.);
  29.         pSeries3->AddDataPoint(3.);
  30.         pSeries3->AddDataPoint(16.);
  31.         pSeries3->AddDataPoint(19.);
  32.         pSeries3->AddDataPoint(19.);

  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. }
复制代码
在函数中创建图表的关键代码为
BCGPChartCategory category = BCGPChartBar;//图表种类,F12查看全部;
BCGPChartType type = BCGP_CT_SIMPLE;//BCGP_CT_STACKED ;//BCGP_CT_100STACKED;//图表类型,按F12查看全部;
pChart->SetChartType(category, type);//设置图表类别;
传递参数BCGP_CT_SIMPLE为簇状,传递参数BCGP_CT_STACKED 为叠加。
创建时有开启布局管理器,记得在构造函数中添加代码EnableLayout();

最后就是添加两按钮,实现图表标签位置与渐变样式的设置。
  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. }


  28. void CMy123View::OnBnClickedButton2()
  29. {
  30.         //渐变为枚举类型,有以下供选择使用;
  31.         //enum BCGP_GRADIENT_TYPE
  32.         //{
  33.         //        BCGP_GRADIENT_TYPE_FIRST          = 0,
  34.         //        BCGP_NO_GRADIENT                  = BCGP_GRADIENT_TYPE_FIRST,
  35.         //        BCGP_GRADIENT_HORIZONTAL          = 1,
  36.         //        BCGP_GRADIENT_VERTICAL            = 2,
  37.         //        BCGP_GRADIENT_DIAGONAL_LEFT       = 3,
  38.         //        BCGP_GRADIENT_DIAGONAL_RIGHT      = 4,
  39.         //        BCGP_GRADIENT_CENTER_HORIZONTAL   = 5,
  40.         //        BCGP_GRADIENT_CENTER_VERTICAL     = 6,
  41.         //        BCGP_GRADIENT_RADIAL_TOP          = 7,
  42.         //        BCGP_GRADIENT_RADIAL_CENTER       = 8,
  43.         //        BCGP_GRADIENT_RADIAL_BOTTOM       = 9,
  44.         //        BCGP_GRADIENT_RADIAL_LEFT         = 10,
  45.         //        BCGP_GRADIENT_RADIAL_RIGHT        = 11,
  46.         //        BCGP_GRADIENT_RADIAL_TOP_LEFT     = 12,
  47.         //        BCGP_GRADIENT_RADIAL_TOP_RIGHT    = 13,
  48.         //        BCGP_GRADIENT_RADIAL_BOTTOM_LEFT  = 14,
  49.         //        BCGP_GRADIENT_RADIAL_BOTTOM_RIGHT = 15,
  50.         //        BCGP_GRADIENT_BEVEL               = 16,
  51.         //        BCGP_GRADIENT_PIPE_VERTICAL       = 17,
  52.         //        BCGP_GRADIENT_PIPE_HORIZONTAL     = 18,
  53.         //        BCGP_GRADIENT_TYPE_LAST           = BCGP_GRADIENT_PIPE_HORIZONTAL
  54.         //};
  55.         static int nType=-1;//-1为恢复缺省渐变,0为不使用渐变;
  56.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  57.         CBCGPBrush::BCGP_GRADIENT_TYPE type = (CBCGPBrush::BCGP_GRADIENT_TYPE)nType;
  58.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  59.         {
  60.                 CBCGPChartSeries* pSeries = pChart->GetSeries(i);
  61.                 pSeries->SetDefaultFillGradientType(type);
  62.         }
  63.         pChart->Redraw();
  64.         //
  65.         nType++;
  66.         nType=nType>18?-1:nType;
  67. }
复制代码


例程用一以MFC扩展库可以搜索下载。
例程源代码下载地址:
请点击此处下载

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

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

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


  

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

  

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

  

QQ联系我

微信扫扫联系我

  

回复

使用道具 举报

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