QQ登录

只需一步,快速开始

上位机MFC扩展编程图表垂直水平颜色填充区域创建与显示

[ 复制链接 ]
上位机MFC扩展编程图表垂直水平颜色填充区域创建与显示

图表可以很方便直观的将数据呈现,有时我们想将达到指定数值范围的数据以醒目颜色提示。
这时就可以通过在图表上显示几个颜色填充区域,观察区域内数据系列的变化,监视数据。
这个例程实现图表颜色填充对象的创建与显示。
效果如下图:
2020-01-02_152712.jpg
点击界面的显示颜色填充区域按钮,可以显示一垂直与水平的颜色填充区域,再次点击可隐藏。
区域的颜色与透明度在创建时可以指定。
例程对应创建代码如下:
  1. void CMy123View::UpdateChart()
  2. {
  3.         BOOL bShowRange1 = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();
  4.         BOOL bShowRange2 = ((CButton*)GetDlgItem(IDC_CHECK2))->GetCheck();
  5.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  6.         if(NULL == m_pRangeObject1)
  7.                 m_pRangeObject1 = pChart->AddChartRangeObject(2, 6, TRUE, CBCGPBrush(CBCGPColor::RoyalBlue, 0.5));
  8.         if(NULL == m_pRangeObject2)
  9.                 m_pRangeObject2 = pChart->AddChartRangeObject(6, 7.5, FALSE, CBCGPBrush(RGB(rand()%255,rand()%255,rand()%255), 0.1));

  10.         m_pRangeObject1->SetVisible(bShowRange1);
  11.         m_pRangeObject2->SetVisible(bShowRange2);
  12.         pChart->SetDirty(true,true);
  13. }
复制代码
这样单选框IDC_CHECK1,IDC_CHECK2的点击响应函数就可以调用上面函数,
实现颜色填充区域的显示与隐藏。
函数AddChartRangeObject的参数含义为:
dblBottomValSpecifies lower range value in X (for vertical range) or Y (for horizontal range) axis coordinates.
指定区域X低值坐标(垂直类型),或Y低值坐标(水平类型)
dblTopValSpecifies upper range value in X (for vertical range) or Y (for horizontal range) axis coordinates.
指定区域X高值坐标(垂直类型),或Y高值坐标(水平类型)
bHorzTRUE - add a horizontal range; FALSE - add a vertical range.
TRUE表示创建水平区域,FALSE表示垂直区域。
brFillRange fill color.
用于区域填充的带刷,带透明度属性,如CBCGPBrush(CBCGPColor::RoyalBlue, 0.5),透明度0.5
如果不是隐藏颜色填充区域而是删除,可以直接调用图表类的成员函数。
具体如例程代码:
  1. void CMy123View::OnBnClickedCheck3()
  2. {
  3.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  4.         pChart->RemoveAllChartObjects();//全部清除图表对象;
  5.         //pChart->RemoveChartObject(m_pRangeObject1);//单个清除图表对象;
  6.         m_pRangeObject1=m_pRangeObject2=NULL;
  7.         pChart->Redraw();
  8.         //
  9.         ((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(0);
  10.         ((CButton*)GetDlgItem(IDC_CHECK2))->SetCheck(0);
  11.         ((CButton*)GetDlgItem(IDC_CHECK3))->SetCheck(0);
  12. }
复制代码
可直接调用函数RemoveAllChartObjects清除全部图表对象,释放内存空间。
也可以调用函数RemoveChartObject单个删除指定对象。

创建图表与数据系列,添加数据的代码可以参考视窗类的函数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.         //创建数据系列1
  8.         CBCGPChartSeries* pSeries1 = pChart->CreateSeries(_T("Series 1"));
  9.         pSeries1->SetCurveType (BCGPChartFormatSeries::CCT_SPLINE);
  10.         //创建数据系列2
  11.         CBCGPChartSeries* pSeries2 = pChart->CreateSeries(_T("Series 2"));
  12.         pSeries2->SetCurveType (BCGPChartFormatSeries::CCT_SPLINE_HERMITE);
  13.         //系列1添加数据
  14.         pSeries1->AddDataPoint(0.);
  15.         pSeries1->AddDataPoint(2.);
  16.         pSeries1->AddDataPoint(5.);
  17.         pSeries1->AddDataPoint(3.);
  18.         pSeries1->AddDataPoint(3.5);
  19.         pSeries1->AddDataPoint(5.);
  20.         pSeries1->AddDataPoint(8.);
  21.         pSeries1->AddDataPoint(7.);
  22.         //系列2添加数据
  23.         pSeries2->AddDataPoint(2.);
  24.         pSeries2->AddDataPoint(4.);
  25.         pSeries2->AddDataPoint(6.);
  26.         pSeries2->AddDataPoint(7.);
  27.         pSeries2->AddDataPoint(6.);
  28.         pSeries2->AddDataPoint(3.);
  29.         pSeries2->AddDataPoint(1.);
  30.         pSeries2->AddDataPoint(0.);
  31.         //数据系列显示阴影;
  32.         pChart->SetSeriesShadow(true);

  33.         //添加添加到布局管理器统一管理布局;
  34.         if (GetLayout() == NULL)
  35.                 return bRst;
  36.         CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
  37.         if (pLayout == NULL)
  38.                 return bRst;
  39.         int nID1 = m_wndChart.GetDlgCtrlID();
  40.         pLayout->AddAnchor(nID1, CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);

  41.         return bRst;
  42. }
复制代码
可以下载例程源代码编译运行查看效果。
MFC扩展库的下载,在网站搜索BCGP可找到。
源代码下载地址:
请点击此处下载

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

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

文件名称:上位机MFC扩展编程图表模板.rar 
文件大小:79.06 KB  售价:3金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

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

  

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

  

QQ联系我

微信扫扫联系我

  

回复

使用道具 举报

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