各位大侠们:
    问题是这样的,小弟在做一个基于GPRS技术的数据采集系统的上位机软件,接到了数据要把它们显示出来。实现数据的实时显示。每50ms发一次数据    MFC中的OnPaint()是上来就调用一次,然后每次遇到对话框被覆盖或者移动对话框时有会重画,不会主动重画,所以我就想了两套方案,但是都出现了同样的问题失败了。
   第一套方案我每接一次数据,就用this->Invalidate();刷一次,暂时能实现功能,超过一分钟整个屏幕就乱了,花了;
   第二套方案我给OnPaint()发个一个消息,结果也是超过了一分钟出现了同样的问题,整个屏幕就没法看了,全花了。请问有没有好的方法教教我!

解决方案 »

  1.   

    因为代码量比较大,第一套方案我没有擦背景,只是this->InvalidateRect();闪一小块区域;第二套方案每50MS调用一次Onpaint()函数应该是擦了背景,但是这两种方案都不行
      

  2.   

    显示数据用edit或richedit不行么?
    和OnPaint有什么关系
    你把数据图形化输出了?
      

  3.   

    heksn能具体说说TeeChart的情况和方法么
      

  4.   


    你这个需求实现没有任何问题
    建议:
    1. 可以考虑做个自定义控件,当然也可以在窗口的指定区域绘制
    2. 绘图采用双缓冲技术
    3. OnEraseBkg返回true
      

  5.   

    你这个需求实现没有任何问题
    建议:
    1. 可以考虑做个自定义控件,当然也可以在窗口的指定区域绘制
    2. 绘图采用双缓冲技术
    3. OnEraseBkg返回true
    [/Quote]
    听着有点意思,我是原先是在TAB空间下的一个对话框类中花了一个矩形框,在矩形框中画得图,能不能具体讲讲双缓冲技术呢,不太懂,能不能给出讲解代码呢
      

  6.   

    关于双缓冲的理论网上一搜一大堆
    我就不在这赘述了
    你要代码我就给你一段典型应用
    希望对你有帮助void YourCtrl::OnPaint()
    {
    CPaintDC dc(this);
    CRect rectClient;
    CBitmap bitmapTemp, *pOldBitmap;
    CDC* pMemDC = new CDC;//内存DC //获取控件信息
    GetClientRect(rectClient);
    //创建位图内存
    bitmapTemp.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());
    pMemDC->CreateCompatibleDC(&dc);
    pOldBitmap = pMemDC->SelectObject(&bitmapTemp);
    //在pMemDC上绘图
    //将pMemDC上的内容绘制到主dc上
    dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(), pMemDC, 0, 0, SRCCOPY);
    pMemDC->SelectObject(pOldBitmap);
    ReleaseDC(pMemDC);
    delete pMemDC;
    }
      

  7.   

    你在画图前先画个客户区大小的背景框就可以解决. Rangle(