扫一扫,访问微社区

QQ登录

只需一步,快速开始

MFC扩展编程实例雷达图表曲线样式与标签设置

[ 复制链接 ]
MFC扩展编程实例雷达图表曲线样式与标签设置

当前例程实现雷达图表的创建使用,及曲线样式与标签设置。
效果如下图。

MFC扩展编程实例雷达图表曲线样式与标签设置

MFC扩展编程实例雷达图表曲线样式与标签设置


例程运行默认未显示标签,也未闭合填充数据系列。
我们可点击界面的几个按钮来设置曲线的一些属性。
如闭合指定曲线,填充指定曲线,设置曲线的类型为线段还是曲线,
曲线的宽度,样式也可以通过按钮设置。
标签显示角度也可以设置。

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

在视窗集成类中添加图表变量与设置图表的函数。
        CBCGPChartCtrl m_wndChart;
        void UpdateChart();

  1. int nAngle=0;
  2. int nLineStyle=0;
  3. int nLineWidth=1;
  4. int nCurveType=0;
  5. void CMy123View::UpdateChart()
  6. {
  7.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  8.         ASSERT_VALID(pChart);
  9.         pChart->ShowDataMarkers();//显示数据标识点;
  10.         pChart->ShowDataLabels(true, TRUE, TRUE, nAngle * 45);//显示数据标签;
  11.         for (int i = 0; i < pChart->GetSeriesCount(); i++)
  12.         {
  13.                 CBCGPChartPolarSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPolarSeries, pChart->GetSeries(i));
  14.                 ASSERT_VALID(pSeries);
  15.                 BCGPChartFormatSeries style = pSeries->GetSeriesFormat();
  16.                 switch (nCurveType)//曲线类型;
  17.                 {
  18.                 case 0:
  19.                         style.m_curveType = BCGPChartFormatSeries::CCT_NO_LINE;
  20.                         break;
  21.                 case 1:
  22.                         style.m_curveType = BCGPChartFormatSeries::CCT_LINE;
  23.                         break;
  24.                 case 2:
  25.                         style.m_curveType = BCGPChartFormatSeries::CCT_SPLINE;
  26.                         break;
  27.                 case 3:
  28.                         style.m_curveType = BCGPChartFormatSeries::CCT_SPLINE_HERMITE;
  29.                         break;
  30.                 }
  31.                 style.SetSeriesOutlineDashStyle((CBCGPStrokeStyle::BCGP_DASH_STYLE)nLineStyle);//曲线样式;
  32.                 style.SetSeriesLineWidth(nLineWidth);//曲线宽度;
  33.                 pSeries->CloseShape(i == 0, i == 0);//第二系列不闭合不填充;
  34.                 pSeries->SetSeriesFormat(style);
  35.         }
  36.         pChart->Redraw();
  37. }
复制代码


图表变量通过视窗类的虚函数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.         pChart->SetChartType(BCGPChartPolar);//
  11.         pChart->SetChartTitle(_T("雷达图表"));//设置图表标题;
  12.         pChart->SetSeriesShadow(true);//数据系列显示阴影;
  13.         pChart->SetThemeOpacity(30);
  14.         //创建数据系列,添加数据;
  15.         CBCGPChartSeries* pSeries1 = pChart->CreateSeries(_T("系列 1"));
  16.         CBCGPChartSeries* pSeries2 = pChart->CreateSeries(_T("系列 2"));
  17.         pSeries1->AddDataPoint(15.);
  18.         pSeries1->AddDataPoint(10.);
  19.         pSeries1->AddDataPoint(8.);
  20.         pSeries1->AddDataPoint(22.);

  21.         pSeries2->AddDataPoint(9.);
  22.         pSeries2->AddDataPoint(15.);
  23.         pSeries2->AddDataPoint(19.);
  24.         pSeries2->AddDataPoint(21.);
  25.         pSeries2->AddDataPoint(23.);
  26.         //坐标设置;
  27.         CBCGPChartAxisPolarX* pXAxis = DYNAMIC_DOWNCAST(CBCGPChartAxisPolarX, pChart->GetChartAxis(BCGP_CHART_X_POLAR_AXIS));
  28.         ASSERT_VALID(pXAxis);
  29.         pXAxis->m_majorTickMarkType = CBCGPChartAxis::TMT_CROSS;
  30.         CBCGPChartAxisPolarY* pYAxis = DYNAMIC_DOWNCAST(CBCGPChartAxisPolarY, pChart->GetChartAxis(BCGP_CHART_Y_POLAR_AXIS));
  31.         ASSERT_VALID(pYAxis);
  32.         pYAxis->m_majorTickMarkType = CBCGPChartAxis::TMT_CROSS;
  33.         pYAxis->m_bRadialGridLines = FALSE;
  34.         //添加添加到布局管理器统一管理布局;
  35.         if (GetLayout() == NULL)
  36.                 return bRst;
  37.         CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
  38.         if (pLayout == NULL)
  39.                 return bRst;
  40.         pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
  41.         //
  42.         return bRst;
  43. }
复制代码
在设置图表属性的函数前面有几个全局的变量,通过这些变量作为参数可以设置图表属性。
所以我们添加几个按钮,修改这些变量可以修改图表外观。
  1. void CMy123View::OnBnClickedButton1()//曲线类型;
  2. {
  3.         nCurveType++;
  4.         nCurveType = nCurveType>3?0:nCurveType;
  5.         UpdateChart();
  6. }


  7. void CMy123View::OnBnClickedButton2()//曲线宽度;
  8. {
  9.         nLineWidth++;
  10.         nLineWidth=nLineWidth>7?0:nLineWidth;
  11.         UpdateChart();
  12. }


  13. void CMy123View::OnBnClickedButton3()//曲线样式;
  14. {
  15.         nLineStyle++;
  16.         nLineStyle = nLineStyle>5?0:nLineStyle;
  17.         UpdateChart();
  18. }


  19. void CMy123View::OnBnClickedButton4()//标签位置;
  20. {
  21.         nAngle++;
  22.         nAngle = nAngle>8?0:nAngle;
  23.         UpdateChart();
  24. }
复制代码

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

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

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

文件名称:40.MFC扩展编程实例雷达图表曲线样式与标签设置.rar 
文件大小:81.08 KB  售价:3金币
下载权限: 不限 以上或 VIP会员   [购买VIP]   [充值积分]   有问题联系我


  

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

  

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

  

QQ联系我

微信扫扫联系我

  

  

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

  

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



回复

使用道具 举报

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