m_chart.SetColumnCount(2); 
m_chart.GetPlot().GetSeriesCollection().GetItem(1).GetSeriesMarker().SetShow(TRUE); 
//m_chart.GetPlot().GetSeriesCollection().GetItem(2).GetSeriesMarker().SetShow(TRUE); m_chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetStyle(0);  //0不连接,1连接 
//m_chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().SetStyle(0);  m_chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().GetVtColor().Set(255,   0,   0); 
m_chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(1);  //赋值数据
int nRowCount = 5; 
m_chart.SetRowCount(nRowCount); 
m_chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetMarker().SetStyle(1); srand( (unsigned)time( NULL ) );  for(int row = 1; row <= nRowCount; ++row) 

m_chart.SetRow(row); 
m_chart.GetDataGrid().SetData(row, 1, row*2, 0); 
//m_chart.GetDataGrid().SetData(row, 2, rand() * 100 / RAND_MAX, 0); 
} 问题1,为什么我的点是十字交叉的,而且又大,有没改变的方法。
问题2, m_chart.SetColumnCount(2); 按曲线方式,这是两条曲线,当我设置m_chart.SetColumnCount(1);的时候,整个mschart空间不显示X,Y轴了,只有背景色。
问题3, m_chart.GetDataGrid().SetData(row, 1, row*2, 0); 是什么意思?
SetData(short Row, short Column, double DataPoint, short nullFlag)这是函数参数,看意思四个参数分别是是x轴,y轴,值,设置。我用的时候怎么好奇怪,散点不按想法排列

解决方案 »

  1.   

    我日啊,第一个问题我也解决了。第一个问题解决方法 m_chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetMarker().SetSize(120);
    m_chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetMarker().SetStyle(14);     //4是圆圈,1十字,0,横杠,2是叉,3是星,5是方块,6菱形
    //7三角,8倒三角,9实心点,10实心方块,11实心菱形,12实心三角,13,实心倒三角,14泛光的点
    第二问题
    如果对于m_chart.SetChartType(3);来说m_Chart.SetColumnCount(4)表示是要显示4条曲线。但是对于16的散点类型来说,显示是2组坐标点。可以知道曲线形式的横坐标更本没有数据,只是通过标签来贴上去的。
    因此在16类型最少要m_Chart.SetColumnCount(2),如果只是1的话整个坐标都不会显示,16的特性就是显示坐标点,必须要1组数据。而不是一个Y轴,X轴贴标签的那种方式。第三个问题  散点赋值方式,和曲线赋值方式有些差异void CpointDlg::UpdateChart()
    {
    VARIANT  vt;
    SAFEARRAY*     pSA;
    SAFEARRAYBOUND sab[2];  //2维
    sab[0].lLbound   = sab[1].lLbound   = 0;
    sab[0].cElements = 5;                                    //点的数量
    sab[1].cElements = 2;                                    //0 x坐标,1 y坐标
    pSA = SafeArrayCreate( VT_R4, 2, sab); HRESULT  hr;
    long saIdx[2];        //saIdx[0]表示第几个,saIdx[1]表示是这个点的Y赋值还是X
    for(int i = 0; i<5; i++) {
    saIdx[0] = i;
    float fout;
    saIdx[1] = 0;
    fout = float(i+ 2)*0.2;     //第i个点的X赋值
    hr = SafeArrayPutElement( pSA, saIdx, &fout); saIdx[1] = 1;
    fout = i*0.1 +0.6f;         //第i个点的Y赋值
    hr = SafeArrayPutElement( pSA, saIdx, &fout);
    ASSERT( SUCCEEDED(hr));
    } vt.vt = VT_ARRAY|VT_R4;
    vt.parray = pSA;
    m_chart.SetChartData( vt);}
    好了,来个人吧,我结贴给分,太可怜了,一个人唱独角戏。
      

  2.   

    我的问题跟LZ一样,真是对我帮助很大,谢谢LZ无私分享!