前面帖子介绍一个图表有很多元素,例如数据系列,标题,数据表格,标签,数据标志等。
这些元件可以单独进行显示隐藏设置,也可以选择是否与图表区域重叠显示。
这个例程实现图表标题的显示,数据表格,标志,标签的显示隐藏操作。
界面如下:
点击界面上对应选择框,可以将每个图表元素显示出来或隐藏不显示。
图表可操作的元素有很多,这此仅实现部分元素的显示隐藏操作。
更多元素与XY轴,自定义区域,线段放在后面例程介绍。
例程首先手动添加消息WM_INITDIALOG的关联处理函数:
ON_MESSAGE(WM_INITDIALOG,OnInitDialog),
在此函数OnInitDialog内,实现图表与数据系列的添加:
- LRESULT CMy123View::OnInitDialog(WPARAM wParam, LPARAM lParam)
- {
- LRESULT lRes = CBCGPFormView::HandleInitDialog (wParam, lParam);
- m_wndChart.SubclassDlgItem(IDC_CHART,this);
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- CBCGPChartSeries* pSeries1 = pChart->CreateSeries(_T("Series 1"));
- pSeries1->SetCurveType (BCGPChartFormatSeries::CCT_SPLINE);
- CBCGPChartSeries* pSeries2 = pChart->CreateSeries(_T("Series 2"));
- pSeries2->SetCurveType (BCGPChartFormatSeries::CCT_SPLINE_HERMITE);
- 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.);
- 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)
- {
- UpdateData(FALSE);
- CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
- if (pLayout != NULL)
- {
- pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
- }
- }
- return lRes;
- }
复制代码 例程使用了界面布局管理器,将图表添加到了管理器内统一管理。
pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
IDC_CHART为手动添加的图片控件ID,用于显示图表。
在界面上添加了众多的单选框按钮,可以双击每个控件,关联选择函数,在函数内都调用函数OnBnClickedButton1,
实现对不同图表元素的显示隐藏操作。
- void CMy123View::OnBnClickedButton1()
- {
- BOOL bShowTitle = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();
- BOOL bTitleOverlap = ((CButton*)GetDlgItem(IDC_CHECK2))->GetCheck();
- BOOL bShowLegend = ((CButton*)GetDlgItem(IDC_CHECK3))->GetCheck();
- BOOL bLegendOverlap = ((CButton*)GetDlgItem(IDC_CHECK4))->GetCheck();
- BOOL bShowDataTable = ((CButton*)GetDlgItem(IDC_CHECK5))->GetCheck();
- BCGPChartFormatDataTable DataTableFormat;
- DataTableFormat.m_bShowLegendKeys = ((CButton*)GetDlgItem(IDC_CHECK6))->GetCheck();
- DataTableFormat.m_bInterlaceRows = TRUE;
- BOOL bShowDataMarkers = ((CButton*)GetDlgItem(IDC_CHECK7))->GetCheck();
- BOOL bShowDataLabels = ((CButton*)GetDlgItem(IDC_CHECK8))->GetCheck();
- //
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- pChart->SetChartTitle(_T("图表标题"));
- pChart->ShowChartTitle(bShowTitle,bTitleOverlap);
- pChart->SetLegendPosition(bShowLegend?BCGPChartLayout::LP_RIGHT:BCGPChartLayout::LP_NONE,bLegendOverlap);
- pChart->ShowDataTable(bShowDataTable,&DataTableFormat);
- pChart->ShowDataMarkers(bShowDataMarkers);
- pChart->ShowDataLabels(bShowDataLabels);
- pChart->Redraw();
- }
复制代码 具体效果与细节可以下载例程源代码编译运行查看。
例程源代码:
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|