QQ登录

只需一步,快速开始

MFC扩展编程实例散点图创建与XY轴位置设置

[ 复制链接 ]
MFC扩展编程实例散点图创建与XY轴位置设置

当前例程实现散点图表的创建及图表XY轴的设置。
效果如下图。

MFC扩展编程实例散点图创建与XY轴位置设置

MFC扩展编程实例散点图创建与XY轴位置设置


散点图表外观主要有数据标识点形式的设置,
例程在创建初始化时使用的是三角形的,要以自行设置为其他形状。

标签显示角度也可进行设置,例程使用45度显示。
图表XY轴显示的位置也有多种设置,其中一种是自定义的位置,可以根据自己需要来设置。

下面是例程实现过程介绍。

先创建基于MFC扩展库工程,class CMy123View : public CBCGPFormView。
在资源对话框界面上添加一图片控件,修改ID为IDC_CHART,用于显示图表。
在集成类中添加图表变量CBCGPChartCtrl m_wndChart;
以及虚函数Create,用于初始化散点图表。
  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. }
  7. BOOL CMy123View::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
  8. {
  9.         BOOL bRst = CBCGPFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);;
  10.         //图表初始化;
  11.         m_wndChart.SubclassDlgItem(IDC_CHART,this);       
  12.         CBCGPInfoTipOptions infoTipOptions;
  13.         infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_Left;
  14.         m_wndChart.EnableInfoTip(TRUE, &infoTipOptions);//显示提示文本;
  15.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();//获取图表指针;
  16.         pChart->SetChartType(BCGPChartLine, BCGP_CT_SIMPLE);//
  17.         pChart->SetChartTitle(_T("散点图"));//设置图表标题;
  18.         pChart->SetSeriesShadow(true);//数据系列显示阴影;
  19.         pChart->SetLegendPosition(BCGPChartLayout::LP_NONE);//隐藏图例;
  20.         pChart->ShowDataMarkers(TRUE, 7, BCGPChartMarkerOptions::MS_TRIANGLE);//数据标识点显示;
  21.     pChart->ShowDataLabels(TRUE, TRUE, TRUE, 45);//45度显示数据标签;
  22.         //创建数据系列,添加数据;
  23. #define MAX_POINT_SERIES                4
  24. #define MAX_POINTS_IN_SERIES        6
  25. #define MIN_Y_VAL                                0.
  26. #define MAX_Y_VAL                                20.
  27. #define X_RANGE_PER_SERIES                3
  28. #define X_VALUE_GRADE                        100.
  29.         for (int i = 0; i < MAX_POINT_SERIES; i++)
  30.         {
  31.                 int nXRangeLow = (int)(i - MAX_POINT_SERIES / 2.) * X_RANGE_PER_SERIES;
  32.                 int nXRangeHigh = nXRangeLow + X_RANGE_PER_SERIES;
  33.                 for (int j = 0; j < MAX_POINTS_IN_SERIES; j++)
  34.                 {
  35.                         double dblX = Rand(nXRangeLow / X_VALUE_GRADE, nXRangeHigh / X_VALUE_GRADE);
  36.                         double dblY = Rand(MIN_Y_VAL, MAX_Y_VAL);
  37.                         pChart->AddChartDataYX(dblY, dblX, i);
  38.                 }

  39.                 CBCGPChartSeries* pSeries = pChart->GetSeries(i);
  40.                 ASSERT_VALID(pSeries);
  41.                 BCGPChartFormatSeries style = pSeries->GetSeriesFormat();
  42.                 style.m_curveType = BCGPChartFormatSeries::CCT_NO_LINE;
  43.                 pSeries->SetSeriesFormat(style);
  44.                 pSeries->SetDataLabelDataFormat(_T("%.2f"));
  45.         }
  46.         //xy轴设置;
  47.         CBCGPChartAxis* pYAxis = pChart->GetChartAxis(BCGP_CHART_Y_PRIMARY_AXIS);
  48.         ASSERT_VALID(pYAxis);
  49.         pYAxis->m_majorTickMarkType = CBCGPChartAxis::TMT_CROSS;
  50.         pYAxis->m_minorTickMarkType = CBCGPChartAxis::TMT_CROSS;
  51.         pYAxis->m_crossType = CBCGPChartAxis::CT_MAXIMUM_AXIS_VALUE;
  52.         //
  53.         CBCGPChartAxis* pXAxis = pChart->GetChartAxis(BCGP_CHART_X_PRIMARY_AXIS);
  54.         ASSERT_VALID(pXAxis);
  55.         pXAxis->m_minorTickMarkType = CBCGPChartAxis::TMT_OUTSIDE;
  56.         pXAxis->m_crossType = CBCGPChartAxis::CT_MAXIMUM_AXIS_VALUE;
  57.         //添加添加到布局管理器统一管理布局;
  58.         if (GetLayout() == NULL)
  59.                 return bRst;
  60.         CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
  61.         if (pLayout == NULL)
  62.                 return bRst;
  63.         pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
  64.         //
  65.         return bRst;
  66. }
复制代码


初始化图表后,就可以编译运行例程了,最后还可以添加一按钮控件,用于设置XY轴的显示位置。
  1. void CMy123View::OnBnClickedButton1()
  2. {
  3.         static int nAxisType=0;
  4.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  5.         ASSERT_VALID(pChart);
  6.         CBCGPChartAxis* pYAxis = pChart->GetChartAxis(BCGP_CHART_Y_PRIMARY_AXIS);
  7.         ASSERT_VALID(pYAxis);
  8.         CBCGPChartAxis* pXAxis = pChart->GetChartAxis(BCGP_CHART_X_PRIMARY_AXIS);
  9.         ASSERT_VALID(pXAxis);
  10.         //
  11.         switch (nAxisType)
  12.         {
  13.         case 0:
  14.                 pYAxis->m_crossType = CBCGPChartAxis::CT_AUTO;
  15.                 pXAxis->m_crossType = CBCGPChartAxis::CT_AUTO;
  16.                 break;

  17.         case 1:
  18.                 pYAxis->m_crossType = CBCGPChartAxis::CT_MAXIMUM_AXIS_VALUE;
  19.                 pXAxis->m_crossType = CBCGPChartAxis::CT_MAXIMUM_AXIS_VALUE;
  20.                 break;

  21.         case 2:
  22.                 pYAxis->m_crossType = CBCGPChartAxis::CT_MINIMUM_AXIS_VALUE;
  23.                 pXAxis->m_crossType = CBCGPChartAxis::CT_MINIMUM_AXIS_VALUE;
  24.                 break;

  25.         case 3:
  26.                 pYAxis->m_crossType = CBCGPChartAxis::CT_AXIS_VALUE;
  27.                 pYAxis->m_dblCrossOtherAxisValue = 0.02;

  28.                 pXAxis->m_crossType = CBCGPChartAxis::CT_AXIS_VALUE;
  29.                 pXAxis->m_dblCrossOtherAxisValue = 7.0;
  30.                 break;
  31.         }
  32.         pChart->SetDirty(TRUE,TRUE);
  33.         nAxisType++;
  34.         nAxisType= nAxisType>3?0:nAxisType;
  35. }
复制代码


例程用到的MFC扩展库可以网站下载。
例程源代码下载地址:
请点击此处下载

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

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

文件名称:41.MFC扩展编程实例散点图创建与XY轴位置设置.rar 
文件大小:80.78 KB  售价:3金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

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

  

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

  

QQ联系我

微信扫扫联系我

  

  

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

  

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



回复

使用道具 举报

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