我的英语不是很好,所以请原谅我。我已成功将数据添加到饼图中,但饼图不会仅显示控件中显示的数据。

控件的属性似乎已正确配置。我不知道问题出在哪里,因为我整夜都在解决问题。

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。编译并运行程序后,结果如图所示。

c&#43;&#43; - 在MFC TeeChart中绘制饼图-LMLPHP

最佳答案

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

这里需要设计思想。显示长点值标签(系列标记)并重复图例中的某些信息会占用大量可显示图表的工作空间。如果将图例放置在图表下方,并且面板的大小已相应调整,并且可能使用的信息不与系列标记的信息重复(使用不同的图例文本样式),并且设置了带有多行的系列标记,箭头长度更短,那么整体结果应该非常可读。

09-25 21:45