MFC扩展编程实例2D3D环形图爆炸渐变标签与圆孔设置
当前例程创建了二维及三维的环形图,并以爆炸形式显示,渐变样式设置,标签设置,以及圆孔大小设置。
效果如下图。
MFC扩展编程实例2D3D环形图爆炸渐变标签与圆孔设置
例程界面如上图,点击界面圆形按钮可以实现对环形图表的旋转操作。
点击设置标签位置按钮,可以实现图表标签位置的更改。
点击爆炸显示,可以让环形图表以爆炸形式显示。
也可以让环形图表填充整个图表区域,点击对应按钮就好。
还可以点击界面的设置渐变图表按钮来切换渐变模式。
环形图表中间的孔洞大小可以以百分比形式来设置大小。
下面是创建过程及关键代码。
先创建基于class CMy123View : public CBCGPFormView的单文档程序。
在视窗类中添加变量。
CBCGPRotationCtrl m_wndRotate;
CBCGPChartCtrl m_wndChart;
在视窗对话框资源上添加两图片控件。
IDC_ROTATE,IDC_CHART用于旋转图表与显示图表。
准备好后,就可以添加视窗类的虚函数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_wndRotate.SubclassDlgItem(IDC_ROTATE,this);
- m_wndRotate.GetRotationObject()->SetAutorepeatMode(100);
- m_wndRotate.GetRotationObject()->SetColorTheme(CBCGPRotationObject::BCGP_COLOR_THEME_VISUAL_MANAGER);
- m_wndRotate.GetRotationObject()->EnableFlatIcons();
- CBCGPRotationObject* pRO = m_wndRotate.GetRotationObject();
- pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_CLOCKWISE, FALSE);
- pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_NARROW_FIELD_OF_VIEW, FALSE);
- pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_WIDEN_FIELD_OF_VIEW, FALSE);
- pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_COUNTER_CLOCKWISE, FALSE);
- pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_UP, FALSE);
- pRO->EnablePart(CBCGPRotationObject::BCGP_ROTATION_DOWN, FALSE);
- //图表初始化;
- 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(BCGPChartDoughnut3D);//BCGPChartDoughnut,创建为2D,3D环形图;
- pChart->SetChartTitle(_T("2D/3D圆环图表"));//设置图表标题;
- pChart->SetSeriesShadow(true);//数据系列显示阴影;
- //创建一数据系列,添加数据;
- pChart->AddChartData(_T("工控编程吧"), 6700);
- pChart->AddChartData(_T("头条"), 4500);
- pChart->AddChartData(_T("百度"), 2200);
- pChart->AddChartData(_T("微信"), 1500);
- pChart->AddChartData(_T("微博"), 1400);
- pChart->AddChartData(_T("阿里"), 1350);
- pChart->AddChartData(_T("其他"), 1700);
- //添加添加到布局管理器统一管理布局;
- 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()
- {
- static int nIndex=0,nShow=0;
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- pChart->ShowDataLabels(TRUE);
- BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
- dataLabelOptions.m_position = (BCGPChartDataLabelOptions::LabelPosition)(nIndex==5?nIndex-1:nIndex);
- dataLabelOptions.m_bUnderlineDataLabel = TRUE;
- dataLabelOptions.m_content = nShow>4 ? BCGPChartDataLabelOptions::LC_DP_INDEX : BCGPChartDataLabelOptions::LC_PIE_NAME_PERCENTAGE;
- dataLabelOptions.m_bDrawDataLabelBorder = dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_DEFAULT_POS && dataLabelOptions.m_position != BCGPChartDataLabelOptions::LP_OUTSIDE_END;
- pChart->SetDataLabelsOptions(dataLabelOptions);
- for (int i = 0; i < pChart->GetSeriesCount(); i++)
- {
- CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
- pSeries->SetLegendLabelContent(nShow>4 ?
- (BCGPChartDataLabelOptions::LabelContent)(BCGPChartDataLabelOptions::LC_PIE_NAME_PERCENTAGE | BCGPChartDataLabelOptions::LC_DP_INDEX) :
- BCGPChartDataLabelOptions::LC_DEFAULT_CONTENT);
- }
- pChart->Redraw();
- //
- nIndex++;
- nIndex = nIndex>4?0:nIndex;
- nShow++;
- nShow = nShow>8?0:nShow;
- }
复制代码 爆炸显示按钮。
- void CMy123View::OnBnClickedButton2()
- {
- static bool bExplose=false;
- bExplose = !bExplose;
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- for (int i = 0; i < pChart->GetSeriesCount(); i++)
- {
- CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
- pSeries->SetPieExplosion(bExplose ? 10 : 0);//设置圆饼图每个数据爆炸像素大小;
- pSeries->SetDataPointPieExplosion(bExplose ? 20 : 0, 0);//设置第0个数据点的爆炸像素大小;
- }
- pChart->SetDirty(true,true);;//图表重绘设置生效;
- }
复制代码
图表填充按钮。
- void CMy123View::OnBnClickedButton3()
- {
- static bool bFit = false;
- bFit = !bFit;
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- for (int i = 0; i < pChart->GetSeriesCount(); i++)
- {
- CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
- pSeries->EnableFitDiagramArea(bFit);//设置圆饼图填充图表区域;
- }
- pChart->SetDirty(true,true);;//图表重绘设置生效;
- }
复制代码 渐变与孔大小设置按钮。
- void CMy123View::OnBnClickedButton4()
- {
- static int nIndex = 0;
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- for (int i = 0; i < pChart->GetSeriesCount(); i++)
- {
- CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
- pSeries->SetDefaultFillGradientType( (CBCGPBrush::BCGP_GRADIENT_TYPE)nIndex);//设置渐变模式;
- }
- pChart->SetDirty(true,true);;//图表重绘设置生效;
- //
- nIndex++;
- nIndex=nIndex>18?0:nIndex;
- }
- void CMy123View::OnBnClickedButton5()
- {
- static int nPer = 0;
- CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
- for (int i = 0; i < pChart->GetSeriesCount(); i++)
- {
- CBCGPChartDoughnutSeries* pDoughnutSeries = DYNAMIC_DOWNCAST(CBCGPChartDoughnutSeries, pChart->GetSeries(i));
- pDoughnutSeries->SetDoughnutPercent(nPer);
- }
- pChart->SetDirty(true,true);;//图表重绘设置生效;
- //
- nPer +=10;
- nPer=nPer>99?0:nPer;
- }
复制代码 例程使用的MFC扩展库可以网站搜索下载。
例程源代码下载地址:
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|