我用mfc对话框程序接收实时的数据,然后把这些数据转换,用点的形式来一个个打在mfc对话框上:dc.SetPixel(x,y, RGB(255, 0, 0));问题是:我想让它,当打的点达到设定的末尾的时候,我让点进行前移,但是不会超过头部,就是前面的不断消失,后面的不断前移,如限定头部从0开始打点,到尾部1000打点结束。当点从0打到1000后,出现不断前移的现象:头部的点不断消失,最后的点始终在最末尾打出来
我该如何添加代码,才能让打的点在某限定的范围内,出现前移的现象?

解决方案 »

  1.   

    不能直接打点的,接收到的数据要先存入内存中,比如有个 int array[1000]绘制时把内存中的数据绘制出来,有1的就打点没有1的就不打
    当然,最好是分析个类出来,和这个数据关联,比如值的大小对应点的大小,等等
    总之,接收到的数据要先存入内存,收到数据存入内存,触发绘制.
    要怎么移动\绘制,都是对内存中数据的处理.
      

  2.   

    有好多种方法,最简单的就是 ScrollDC 应该是这个函数,就是滚动DC,你可以按原来的座标继续绘另一种方法,就是把当前画面存到bmp中,然后把这个bmp左移几个像素(下一个点的绘制区)绘制出来,然后在新的那几个像素的区域再绘出新点.方法1简单,不好理解(前面绘制的可以ScrollDC再移回来看)
    方法2麻烦一点好,很好理解(但是前面绘制的看不见了)
      

  3.   

    你说的是实时曲线的问题开缓冲区是最好的办法,但你最好用循环链表来存贮你的数据你界面的数据数量就是你的链表的数据量,一个点对应一个数据给循环链表两个指针,一个指向头,一个指向尾巴剩下的就是循环做三件事情。1, 头和尾巴都下移一个位置
    2,新采集来的数据填到尾巴的位置
    3,头数据对应坐标0,尾巴数据对应最大坐标位置,从头画到尾巴OVER
      

  4.   

    我的方法是把数据转换成了像素点,接收一个数据打一个像素点。我让要打出的点从原点开始,打到1000的时候,原点原来的像素点就小时了,然后第二个向前移,后面一样,依次前移,在最后1000的位置上,始终接收刚到的数据像素点,就像心电图那样,一直往前进的样子。程序里已经有的是这样方式的语句:
    y=0;
    if(Buffer[data+2]=='6')
     {
       if(y<1000)   
       x=Buffer[data+2] ;
       y+=20;
       dc.SetPixel(x,y, RGB(255, 0, 0));
     }
    其中,Buffer[]里存储接收到的实时数据x,然后把这个点转成像素点输出来,怎么让y不超过1000,并且这样让图形看起来前移?
      

  5.   

    我的方法是把数据转换成了像素点,接收一个数据打一个像素点。我让要打出的点从原点开始,打到1000的时候,原点原来的像素点就小时了,然后第二个向前移,后面一样,依次前移,在最后1000的位置上,始终接收刚到的数据像素点,就像心电图那样,一直往前进的样子。程序里已经有的是这样方式的语句:
    y=0;
    if(Buffer[data+2]=='6')
     {
      if(y<1000)   
      x=Buffer[data+2] ;
      y+=20;
      dc.SetPixel(x,y, RGB(255, 0, 0));
     }
    其中,Buffer[]里存储接收到的实时数据x,然后把这个点转成像素点输出来,怎么让y不超过1000,并且这样让图形看起来前移?
      

  6.   

    首先设定一个数组Buffer[300],把它看成是屏幕,也就是一屏显示300个点。
    然后你每隔一定时间就把接收到的实时数据的最后300个数复制到Buffer中。
    绘制出Buffer,现象就是你所希望的那样