我想动态显示一条波形
这个CEdit控件可以每隔很短的时间得到即将要增量显示图形所需的部分数据
我很想一点一点的增量画出
而不是每次都要把以前所画的东西全部再来过
请问如何仅仅只对这一块我想画的部分画图呢?
而且可以避免在画的过程中窗口被拖动引起的onpaint使得已经画的都没了
请问怎么画效率会高呢 
如果每次都是一有数据就全部重画 
总会得屏幕在闪烁 很难看的

解决方案 »

  1.   

    在OnPaint
    CPaintDC dc(this); // device context for painting
    dc.m_ps.rcPaint;
    rcPaint中包含了dialog中需要更新的RECT,
      

  2.   

    画图操作是不会引起Paint事件的,除非你调用了InvalidateRect,所以你就画吧。
    如果窗体被覆盖了那么肯定要重画的。建议你在内存DC中画图,最后BitBlt到窗口DC上,而且只重画无效区域
      

  3.   

    这个最好用异或笔操作:
    CPoint point;
    COLORREF XorColor = pDC->GetBkColor() ^ GetPenColor();
    CPen pen(PS_DOT, 1, XorColor), *oldpen;
    int oldmode = pDC->GetROP2();
    oldpen = pDC->SelectObject(&pen);
    pDC->SetROP2(R2_XORPEN);
    //首先删除原矩形
    pDC->MoveTo(m_x1,m_y1);
    pDC->LineTo(m_x2,m_y1);
    pDC->LineTo(m_x2,m_y2);
    pDC->LineTo(m_x1,m_y2);
    pDC->LineTo(m_x1,m_y1);
    //修改新图形坐标

    m_x1 += x-m_oldx, m_y1 += y-m_oldy;
    m_x2 += x-m_oldx, m_y1 += y-m_oldy;
    pDC->MoveTo(m_x1,m_y1);
    pDC->LineTo(m_x2,m_y1);
    pDC->LineTo(m_x2,m_y2);
    pDC->LineTo(m_x1,m_y2);
    pDC->LineTo(m_x1,m_y1);
    //以下恢复DC
    pDC->SetROP2(oldmode);
    pDC->SelectObject(oldpen);
    pen.DeleteObject();//释放笔资源
      

  4.   

    用局部更新,或位图Bitblt速度都是较慢的,而且局部更新不容易控制