工控编程吧
标题:
上位机MFC扩展编程图表显示标题图例数据的标志表格及标签
[打印本页]
作者:
qq263946146
时间:
2020-1-1 18:31
标题:
上位机MFC扩展编程图表显示标题图例数据的标志表格及标签
前面帖子介绍一个图表有很多元素,例如数据系列,标题,数据表格,标签,数据标志等。
这些元件可以单独进行显示隐藏设置,也可以选择是否与图表区域重叠显示。
这个例程实现图表标题的显示,数据表格,标志,标签的显示隐藏操作。
界面如下:
(, 下载次数: 1)
上传
点击文件名下载附件
点击界面上对应选择框,可以将每个图表元素显示出来或隐藏不显示。
图表可操作的元素有很多,这此仅实现部分元素的显示隐藏操作。
更多元素与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();
}
复制代码
具体效果与细节可以下载例程源代码编译运行查看。
例程源代码:
[weixinlianxi]1[/weixinlianxi]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4