hur.cn - 华软网

 热门搜索

数组的调用

  作者:未知    来源:网络    更新时间:2011/7/15
首先,我在CMainFrame的构造函数中
CMainFrame::CMainFrame()
{
len=0;//在框架类中定了 public int len;
rec=new int[50];//在框架类中定了 int *rec;
}
然后,每次接收到一个数据,就会执行一次::OnReceive()函数
void CMainFrame::OnReceive()
{
rec[0]=0;
rec[len+1]=aa;//所接收到的数据

len=len+1;
CMyview1* pView = (CMyview1*)GetActiveView();
pView->Invalidate();
}
最后,在CMyview1(派生于CView)类里面的
void CMyview1::OnDraw(CDC* pDC)
{
     CMainFrame *pt=(CMainFrame*)AfxGetApp()->m_pMainWnd;
     int i;
     for(i=0;i<(pt->len);i++)
     {

pDC->MoveTo(gridRect.left+(i*(int)datadx),gridRect.bottom-(pt->rec[i])*(int)datady);//起始点: pDC->LineTo(gridRect.left+((i+1)*(int)datadx),gridRect.bottom-(pt->rec[i+1])*(int)datady);
      }
}
我的目的是,每次收到一个数据,就画出一条直线,为什么我这样会出错呢?如果把pt->rec[i]与pt->rec[i+1]换成一个已知数组比如(a[i]与a[i+1])a[5]={0,1,2,5,6};的话,就就不会出错。请问是不是我rec的初始化错了?
---华软 网友回答---
单步调试,或许发贴的时间之内就已经找出问题了。
---华软网友回复---
你在用已知数组时,用的len值等于几?
也就是说,你用数组a[5]={0,1,2,5,6};时,len值=?
---华软网友回复---
只赋值 最后一个数据  “rec[len+1]=aa;//所接收到的数据” 应该循环赋值rec[0....n]=aa[0...n]


---华软网友回复---
引用 2 楼 happyparrot 的回复:
你在用已知数组时,用的len值等于几?
也就是说,你用数组a[5]={0,1,2,5,6};时,len值=?

一样的 构造函数中的 len=0;
---华软网友回复---
引用 3 楼 sharptiger123 的回复:
只赋值 最后一个数据 “rec[len+1]=aa;//所接收到的数据” 应该循环赋值rec[0....n]=aa[0...n]

我每次值收到一个数据,aa是一个int 型变量。
第一次收到数据的时候 :rec[1]=aa;//第一次 收到的数据
第二次收到数据的时候:rec[2]=aa;//第二次 收到的数据

---华软网友回复---
需要确保你的数组不溢出~
---华软网友回复---
如何做?那我把rec=new int[50];//改成rec=new int[];// 也不行
---华软网友回复---
和你交流真的挺累。
第一你不说什么错误;第二你自己不调试代码;第三我问的问题你答非所问。
---华软网友回复---
程序运行没有报错,只是你画出来的图,不是在那个位置,比如接收到5,应该画到5的位置去,可是她会跑的看不见,一条老远的线。len的值 我不是和你说了吗 构造函数中的初始化0,还是没接收到一次 就增加1啊
---华软网友回复---
你让别人怎么帮你呢?线画的很远,可你的MoveTo中都有个gridRc,还有datadx,datady,都不知道是什么值,怎么分析阿
另外这个错误现象,你在发帖时就应该给出,否则你看大家的回复,都去怀疑数组越界,你准备什么时候解决问题啊。问问题需要把实际的错误现在说清楚,相关不明的参数值要给出来,否则怎么解决阿
---华软网友回复---
void CMyview1::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

    CRect rc;
GetClientRect(rc);
rc.DeflateRect(20,50);//通过朝CRect的中心移动边以缩小CRect通过朝CRect的中心移动边以缩小CRect
    

gridx=40;//网格数x
gridy=50;//网格数y
dx=rc.Width()/gridx;//每个网格的宽度
dy=rc.Height()/gridy;
CRect gridRect(rc.left,rc.top,rc.left+(int)dx*gridx,rc.top+(int)dy*gridy);// 取得画图区的大小
    //填充背景
//CBrush brush(RGB(0,0,0));
//pDC->FillRect(&gridRect,&brush);
CPen Bluepen,Blackpen,Redpen;
Blackpen.CreatePen(PS_SOLID,2,RGB(0,0,0));//黑色 
    Redpen.CreatePen(PS_DOT,1,RGB(255,0,0));//红色
Bluepen.CreatePen(PS_SOLID,1,RGB(0,0,255));//蓝色
double x_left=0.0,x_right=0.0,y_top=0.0,y_bottom=0.0;
        x_left=0;
x_right=gridx;
y_bottom=0;
y_top=gridy;
/******************画坐标****************************/

CPen*oldPen=pDC->SelectObject(&Bluepen);
pDC->MoveTo(gridRect.left,gridRect.bottom);
pDC->LineTo(gridRect.right,gridRect.bottom);
pDC->MoveTo(gridRect.left,gridRect.bottom);
pDC->LineTo(gridRect.left,gridRect.top);


 datadx=gridRect.Width()/gridx;//???
 datady=gridRect.Height()/gridy;
/*******************标刻度****************/
oldPen=pDC->SelectObject(&Blackpen);
CString t;
 Xper=(x_right-x_left)/gridx;
 Yper=(y_top-y_bottom)/gridy;
for(int a=0;a<=gridx;a=a++)
{
pDC->MoveTo(gridRect.left+a*(int)datadx,gridRect.bottom);
pDC->LineTo(gridRect.left+a*(int)datadx,gridRect.bottom-5);

        t.Format("%.d",a);//%.0d用浮点型数来输出变量
pDC->TextOut(gridRect.left+a*(int)datadx,gridRect.bottom+10,t);
}


    for(int b=0;b<=gridy;b++)
{
pDC->MoveTo(gridRect.left,gridRect.bottom-b*(int)datady);
pDC->LineTo(gridRect.left+5,gridRect.bottom-b*(int)datady);

t.Format("%.d",b);
pDC->TextOut(gridRect.left-20,gridRect.bottom-b*(int)datady-10,t);
}

/******************************网格的实现******************************************/

oldPen=pDC->SelectObject(&Redpen);
    for(int k=1;k<=gridx;k++)
{
pDC->MoveTo(gridRect.left+k*(int)datadx,gridRect.bottom);
pDC->LineTo(gridRect.left+k*(int)datadx,gridRect.top);

}
    for(int u=1;u<=gridy;u++) 
{
        pDC->MoveTo(gridRect.left,gridRect.bottom-u*(int)datady);
pDC->LineTo(gridRect.right,gridRect.bottom-u*(int)datady);

}

/*************************实时数据的显示*************************/

CMainFrame *pt=(CMainFrame*)AfxGetApp()->m_pMainWnd;//获得指向当前系统的主框架类对象的指针
// GetClientRect(rc);
oldPen=pDC->SelectObject(&Blackpen);//画笔设置
int data[5]={0,10,15,14,30};

int i;
for(i=0;i<(pt->len);i++)
{

pDC->MoveTo(gridRect.left+(i*(int)datadx),gridRect.bottom-(pt->rec[i])*(int)datady);//起始点:第一次为绘图为原点,之后为上一次的结束点
pDC->LineTo(gridRect.left+((i+1)*(int)datadx),gridRect.bottom-(pt->rec[i+1])*(int)datady);//

}
}
。。。。。不好意思啊,这是 ondraw里的全部代码
---华软网友回复---
自己搞定了,谢谢各位哈      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。