工控编程吧
标题:
MFC扩展编程实例雷达图表曲线样式与标签设置
[打印本页]
作者:
qq263946146
时间:
2020-2-15 16:30
标题:
MFC扩展编程实例雷达图表曲线样式与标签设置
MFC扩展编程实例雷达图表曲线样式与标签设置
当前例程实现雷达图表的创建使用,及曲线样式与标签设置。
效果如下图。
(, 下载次数: 1)
上传
点击文件名下载附件
例程运行默认未显示标签,也未闭合填充数据系列。
我们可点击界面的几个按钮来设置曲线的一些属性。
如闭合指定曲线,填充指定曲线,设置曲线的类型为线段还是曲线,
曲线的宽度,样式也可以通过按钮设置。
标签显示角度也可以设置。
下面是例程实现过程介绍。
先创建基于MFC扩展库的单文档工程,class CMy123View : public CBCGPFormView。
在默认的对话框资源上添加一图片控件,修改ID为IDC_CHART,用于显示图表。
在视窗集成类中添加图表变量与设置图表的函数。
CBCGPChartCtrl m_wndChart;
void UpdateChart();
int nAngle=0;
int nLineStyle=0;
int nLineWidth=1;
int nCurveType=0;
void CMy123View::UpdateChart()
{
CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
ASSERT_VALID(pChart);
pChart->ShowDataMarkers();//显示数据标识点;
pChart->ShowDataLabels(true, TRUE, TRUE, nAngle * 45);//显示数据标签;
for (int i = 0; i < pChart->GetSeriesCount(); i++)
{
CBCGPChartPolarSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPolarSeries, pChart->GetSeries(i));
ASSERT_VALID(pSeries);
BCGPChartFormatSeries style = pSeries->GetSeriesFormat();
switch (nCurveType)//曲线类型;
{
case 0:
style.m_curveType = BCGPChartFormatSeries::CCT_NO_LINE;
break;
case 1:
style.m_curveType = BCGPChartFormatSeries::CCT_LINE;
break;
case 2:
style.m_curveType = BCGPChartFormatSeries::CCT_SPLINE;
break;
case 3:
style.m_curveType = BCGPChartFormatSeries::CCT_SPLINE_HERMITE;
break;
}
style.SetSeriesOutlineDashStyle((CBCGPStrokeStyle::BCGP_DASH_STYLE)nLineStyle);//曲线样式;
style.SetSeriesLineWidth(nLineWidth);//曲线宽度;
pSeries->CloseShape(i == 0, i == 0);//第二系列不闭合不填充;
pSeries->SetSeriesFormat(style);
}
pChart->Redraw();
}
复制代码
图表变量通过视窗类的虚函数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);
CBCGPInfoTipOptions infoTipOptions;
infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_Left;
m_wndChart.EnableInfoTip(TRUE, &infoTipOptions);//显示提示文本;
CBCGPChartVisualObject* pChart = m_wndChart.GetChart();//获取图表指针;
pChart->SetChartType(BCGPChartPolar);//
pChart->SetChartTitle(_T("雷达图表"));//设置图表标题;
pChart->SetSeriesShadow(true);//数据系列显示阴影;
pChart->SetThemeOpacity(30);
//创建数据系列,添加数据;
CBCGPChartSeries* pSeries1 = pChart->CreateSeries(_T("系列 1"));
CBCGPChartSeries* pSeries2 = pChart->CreateSeries(_T("系列 2"));
pSeries1->AddDataPoint(15.);
pSeries1->AddDataPoint(10.);
pSeries1->AddDataPoint(8.);
pSeries1->AddDataPoint(22.);
pSeries2->AddDataPoint(9.);
pSeries2->AddDataPoint(15.);
pSeries2->AddDataPoint(19.);
pSeries2->AddDataPoint(21.);
pSeries2->AddDataPoint(23.);
//坐标设置;
CBCGPChartAxisPolarX* pXAxis = DYNAMIC_DOWNCAST(CBCGPChartAxisPolarX, pChart->GetChartAxis(BCGP_CHART_X_POLAR_AXIS));
ASSERT_VALID(pXAxis);
pXAxis->m_majorTickMarkType = CBCGPChartAxis::TMT_CROSS;
CBCGPChartAxisPolarY* pYAxis = DYNAMIC_DOWNCAST(CBCGPChartAxisPolarY, pChart->GetChartAxis(BCGP_CHART_Y_POLAR_AXIS));
ASSERT_VALID(pYAxis);
pYAxis->m_majorTickMarkType = CBCGPChartAxis::TMT_CROSS;
pYAxis->m_bRadialGridLines = FALSE;
//添加添加到布局管理器统一管理布局;
if (GetLayout() == NULL)
return bRst;
CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
if (pLayout == NULL)
return bRst;
pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
//
return bRst;
}
复制代码
在设置图表属性的函数前面有几个全局的变量,通过这些变量作为参数可以设置图表属性。
所以我们添加几个按钮,修改这些变量可以修改图表外观。
void CMy123View::OnBnClickedButton1()//曲线类型;
{
nCurveType++;
nCurveType = nCurveType>3?0:nCurveType;
UpdateChart();
}
void CMy123View::OnBnClickedButton2()//曲线宽度;
{
nLineWidth++;
nLineWidth=nLineWidth>7?0:nLineWidth;
UpdateChart();
}
void CMy123View::OnBnClickedButton3()//曲线样式;
{
nLineStyle++;
nLineStyle = nLineStyle>5?0:nLineStyle;
UpdateChart();
}
void CMy123View::OnBnClickedButton4()//标签位置;
{
nAngle++;
nAngle = nAngle>8?0:nAngle;
UpdateChart();
}
复制代码
例程使用到的MFC扩展库可以在网站搜索下载。例程源代码下载地址:
(, 下载次数: 0)
上传
点击文件名下载附件
[weixinlianxi]1[/weixinlianxi]
[MFC408]1[/MFC408]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4