我的英语不是很好,所以请原谅我。我已成功将数据添加到饼图中,但饼图不会仅显示控件中显示的数据。
控件的属性似乎已正确配置。我不知道问题出在哪里,因为我整夜都在解决问题。
BOOL CStatInfPieDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
char temp1[100];
char temp2[100];
CString str;
// TODO: Add extra initialization here
CSeries series = (CSeries)statInfPie.Series(0);
int size = stationInfList.size();
series.put_ColorEachPoint(true);
srand(time(NULL));
for (int i = 0; i < size; i++) {
sprintf(temp1, "%s/%d ", iptostr(stationInfList[i].netaddrA), toCidr(stationInfList[i].netmaskA));
sprintf(temp2, "%s/%d", iptostr(stationInfList[i].netaddrB), toCidr(stationInfList[i].netmaskB));
strcat(temp1, temp2);
str = CString(temp1);
series.Add(stationInfList[i].bcountAToB + stationInfList[i].bcountBToA, str, RGB(rand() % 255, rand() % 255, rand() % 255));
memcpy(temp1, "\0", sizeof(temp1));
memcpy(temp2, "\0", sizeof(temp2));
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
上面的代码示例初始化了包含TeeChart控件的对话框。我通过功能
Add()
添加数据。数组temp1
和数组temp2
是我的描述inf。编译并运行程序后,结果如图所示。最佳答案
TeeChart尝试为长标签和图例留出空间,从而自动减小Pie的直径。在这种情况下,结果是极端的。派没有半径。
可以通过以下几种方法之一解决该问题:
最新版本的TeeChart(AX)包含一个称为InsideSlice for PieMarks的属性。
即TChart1.Series(0).asPie.PieMarks.InsideSlice = True
对于较旧的TeeChart版本,该属性不可用,您可以手动将Arrowlength(标记的连接器)设置为负值:
即。 TChart1.Series(0).Marks.ArrowLength = -20
可以将系列标记设置为渲染多行,占用更少的宽度:
即。 TChart1.Series(0).Marks.MultiLine = True
如果“图例”在图表中带有很长的标签,这也可能不利于图表的可读性。可以将“图例”设置为“ Visible false”,或告诉“图例系列”(饼图)不调整大小以适合。
即。 TChart1.Legend.ResizeChart = False
或可以位于饼图下方
即。 TChart1.Legend.Alignment = laBottom
这里需要设计思想。显示长点值标签(系列标记)并重复图例中的某些信息会占用大量可显示图表的工作空间。如果将图例放置在图表下方,并且面板的大小已相应调整,并且可能使用的信息不与系列标记的信息重复(使用不同的图例文本样式),并且设置了带有多行的系列标记,箭头长度更短,那么整体结果应该非常可读。