关于mschart的散点排列问题

奥雷连诺 2011-01-11 10:32:01

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轴,值,设置。我用的时候怎么好奇怪,散点不按想法排列
...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ko_ng 2012-10-03
  • 打赏
  • 举报
回复
我的问题跟LZ一样,真是对我帮助很大,谢谢LZ无私分享!
zhlhoney 2011-12-17
  • 打赏
  • 举报
回复
我最近在做这方面的项目,但是你的东西没有我想要的。哎!!!
奥雷连诺 2011-01-11
  • 打赏
  • 举报
回复
忘了说了,求助啊,大家帮帮忙。。
奥雷连诺 2011-01-11
  • 打赏
  • 举报
回复
我日啊,第一个问题我也解决了。

第一个问题解决方法

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);

}


好了,来个人吧,我结贴给分,太可怜了,一个人唱独角戏。
奥雷连诺 2011-01-11
  • 打赏
  • 举报
回复
第二个和第三个问题,经过几个小时,我已经解决了。

求大侠解决第一个问题啊? 之后我会将后2个问题的解决方法都给出来。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧