MFC扩展编程实例圆饼爆炸与填充显示及渐变模式设置
当前例程实现对事先创建的圆饼图爆炸显示及填充整个图表区域形式显示。
再实现设置图表渐变模式,效果如下图。
MFC扩展编程实例圆饼爆炸与填充显示及渐变模式设置
例程界面上,圆形控件可以对图表旋转操作。
设置标签位置按钮可以循环设置图表的标签位置。
爆炸显示按钮可以让图表以爆炸形式显示。
填充图表区域按钮可以让圆饼图填充整个图表区域。
渐变模式切换按钮可以切换圆饼图的渐变填充样式。
在创建图表时,可以更改图表的种类,以显示二维或是三维圆饼图。
SetChartType(BCGPChartPie3D);//BCGPChartPie,创建为2D,3D饼图;
下面是例程创建过程与关键代码。
先是创建基于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(BCGPChartPie3D);//BCGPChartPie,创建为2D,3D饼图;
- pChart->SetChartTitle(_T("2D圆饼图"));//设置图表标题;
- 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::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;
- }
复制代码 例程使用到的MFC扩展库可以搜索下载。
例程下载地址:
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
|