上位机MFC扩展编程图表垂直水平颜色填充区域创建与显示
图表可以很方便直观的将数据呈现,有时我们想将达到指定数值范围的数据以醒目颜色提示。
这时就可以通过在图表上显示几个颜色填充区域,观察区域内数据系列的变化,监视数据。
这个例程实现图表颜色填充对象的创建与显示。
效果如下图:
点击界面的显示颜色填充区域按钮,可以显示一垂直与水平的颜色填充区域,再次点击可隐藏。
区域的颜色与透明度在创建时可以指定。
例程对应创建代码如下:
- void CMy123View::UpdateChart()
- {
- BOOL bShowRange1 = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();
- BOOL bShowRange2 = ((CButton*)GetDlgItem(IDC_CHECK2))->GetCheck();
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- if(NULL == m_pRangeObject1)
- m_pRangeObject1 = pChart->AddChartRangeObject(2, 6, TRUE, CBCGPBrush(CBCGPColor::RoyalBlue, 0.5));
- if(NULL == m_pRangeObject2)
- m_pRangeObject2 = pChart->AddChartRangeObject(6, 7.5, FALSE, CBCGPBrush(RGB(rand()%255,rand()%255,rand()%255), 0.1));
- m_pRangeObject1->SetVisible(bShowRange1);
- m_pRangeObject2->SetVisible(bShowRange2);
- pChart->SetDirty(true,true);
- }
复制代码 这样单选框IDC_CHECK1,IDC_CHECK2的点击响应函数就可以调用上面函数,
实现颜色填充区域的显示与隐藏。
函数AddChartRangeObject的参数含义为:
dblBottomVal | Specifies lower range value in X (for vertical range) or Y (for horizontal range) axis coordinates.
指定区域X低值坐标(垂直类型),或Y低值坐标(水平类型) | dblTopVal | Specifies upper range value in X (for vertical range) or Y (for horizontal range) axis coordinates.
指定区域X高值坐标(垂直类型),或Y高值坐标(水平类型) | bHorz | TRUE - add a horizontal range; FALSE - add a vertical range.
TRUE表示创建水平区域,FALSE表示垂直区域。 | brFill | Range fill color.
用于区域填充的带刷,带透明度属性,如CBCGPBrush(CBCGPColor::RoyalBlue, 0.5),透明度0.5 | 如果不是隐藏颜色填充区域而是删除,可以直接调用图表类的成员函数。
具体如例程代码:
- void CMy123View::OnBnClickedCheck3()
- {
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- pChart->RemoveAllChartObjects();//全部清除图表对象;
- //pChart->RemoveChartObject(m_pRangeObject1);//单个清除图表对象;
- m_pRangeObject1=m_pRangeObject2=NULL;
- pChart->Redraw();
- //
- ((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(0);
- ((CButton*)GetDlgItem(IDC_CHECK2))->SetCheck(0);
- ((CButton*)GetDlgItem(IDC_CHECK3))->SetCheck(0);
- }
复制代码 可直接调用函数RemoveAllChartObjects清除全部图表对象,释放内存空间。
也可以调用函数RemoveChartObject单个删除指定对象。
创建图表与数据系列,添加数据的代码可以参考视窗类的函数Create。
- BOOL CMy123View::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
- {
- BOOL bRst= CBCGPFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
- //获取图表指针;
- m_wndChart.SubclassDlgItem(IDC_CHART,this);
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- //创建数据系列1
- CBCGPChartSeries* pSeries1 = pChart->CreateSeries(_T("Series 1"));
- pSeries1->SetCurveType (BCGPChartFormatSeries::CCT_SPLINE);
- //创建数据系列2
- CBCGPChartSeries* pSeries2 = pChart->CreateSeries(_T("Series 2"));
- pSeries2->SetCurveType (BCGPChartFormatSeries::CCT_SPLINE_HERMITE);
- //系列1添加数据
- pSeries1->AddDataPoint(0.);
- pSeries1->AddDataPoint(2.);
- pSeries1->AddDataPoint(5.);
- pSeries1->AddDataPoint(3.);
- pSeries1->AddDataPoint(3.5);
- pSeries1->AddDataPoint(5.);
- pSeries1->AddDataPoint(8.);
- pSeries1->AddDataPoint(7.);
- //系列2添加数据
- pSeries2->AddDataPoint(2.);
- pSeries2->AddDataPoint(4.);
- pSeries2->AddDataPoint(6.);
- pSeries2->AddDataPoint(7.);
- pSeries2->AddDataPoint(6.);
- pSeries2->AddDataPoint(3.);
- pSeries2->AddDataPoint(1.);
- pSeries2->AddDataPoint(0.);
- //数据系列显示阴影;
- pChart->SetSeriesShadow(true);
- //添加添加到布局管理器统一管理布局;
- if (GetLayout() == NULL)
- return bRst;
- CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
- if (pLayout == NULL)
- return bRst;
- int nID1 = m_wndChart.GetDlgCtrlID();
- pLayout->AddAnchor(nID1, CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
- return bRst;
- }
复制代码 可以下载例程源代码编译运行查看效果。
MFC扩展库的下载,在网站搜索BCGP可找到。
源代码下载地址:
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|