工控编程吧
标题:
MFC扩展编程实例圆饼图实现分区合并显示
[打印本页]
作者:
qq263946146
时间:
2020-2-16 15:00
标题:
MFC扩展编程实例圆饼图实现分区合并显示
MFC扩展编程实例圆饼图实现分区合并显示
当前例程实现将圆饼图过小的分区合并显示的功能,效果如下图。
(, 下载次数: 1)
上传
点击文件名下载附件
例程界面有很多过小的分区,让界面杂乱难懂,我们可以通过按钮设置。
将在指定比例以下的全部分区合并为单一的分区显示。
下面是例程实现过程。
先创建基于单文档工程,class CMy123View : public CBCGPFormView。
并在默认对话框资源上添加一图片控件,ID修改为IDC_CHART,用于显示图表。
然后在视窗类中添加图表变量 CBCGPChartCtrl m_wndChart;
以及虚函数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(BCGPChartPie);//图表类型;
pChart->SetChartTitle(_T("圆饼图小分区合并"));//设置图表标题;
pChart->SetSeriesShadow(true);//数据系列显示阴影;
//创建一数据系列,添加数据;
pChart->AddChartData(_T("苹果"), 200);
pChart->AddChartData(_T("桔子"), 5);
pChart->AddChartData(_T("番茄;"), 100);
pChart->AddChartData(_T("葡萄"), 15);
pChart->AddChartData(_T("洋葱"), 4);
pChart->AddChartData(_T("甜瓜"), 300);
pChart->AddChartData(_T("黄瓜"), 50);
pChart->AddChartData(_T("樱桃"), 20);
pChart->AddChartData(_T("土豆"), 150);
pChart->AddChartData(_T("卷心菜"), 250);
pChart->AddChartData(_T("山莓"), 8);
pChart->AddChartData(_T("草莓"), 7);
pChart->AddChartData(_T("西瓜"), 3);
////设置数据标签属性;
pChart->ShowDataLabels();
BCGPChartDataLabelOptions dataLabelOptions = pChart->GetDataLabelOptions();
dataLabelOptions.m_bUnderlineDataLabel = TRUE;
dataLabelOptions.m_bDrawDataLabelBorder = FALSE;
pChart->SetDataLabelsOptions(dataLabelOptions);
//添加到布局管理器统一管理布局;
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()
{
CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
ASSERT_VALID(pChart);
static bool bMerge=true;//是否合并分区;
static int nPercentToMerge = 5;//小于此百分比分区进行合并;
bool bShowCustomLabel = true;//显示显示自定义标签名;
CString sCustomLabelName;
sCustomLabelName.Format(_T("Others: < %d%%"), nPercentToMerge);
for (int i = 0; i < pChart->GetSeriesCount(); i++)
{
CBCGPChartPieSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPieSeries, pChart->GetSeries(i));
ASSERT_VALID(pSeries);
//关键函数,参数分别表示,
//是否合并分区,
//小于多少百分比的分区合并,
//合并后的图表分区是否在图例上同步更新;
//合并后分区在图例显示的标签名;
pSeries->SetGroupSmallerSlices(bMerge, (double)nPercentToMerge, true, sCustomLabelName);
pSeries->SetDefaultFillGradientType(CBCGPBrush::BCGP_GRADIENT_BEVEL);
}
pChart->Redraw();
//
nPercentToMerge+=5;
nPercentToMerge = nPercentToMerge>20?0:nPercentToMerge;
bMerge = nPercentToMerge == 0?false:true;
}
复制代码
例程是基于MFC扩展库实现的,可以在网站内搜索下载。
例程源代码下载地址:
[weixinlianxi]1[/weixinlianxi]
[MFC408]1[/MFC408]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4