我是一个VC入门者,我编了一个小程序,是在坐标系中画两条动态的曲线
采用定时器,运行正常,但当别的窗口覆盖它再移开后,或者是最大化最小化后,
画的东西都不见了,前面我已问过这个问题,有几位大虾回答如下:(已结贴)1.随时把你的画图的数据存在doc中,然后在OnDraw中根据文档中的数据画图就好了
2.需要自己提供刷新机制
  OnDraw, OnPaint里面需要重新画一次,也可以使用缓冲来Bitbit
3.简单的在 OnPaint 在画一次,但这样较慢,
  可以建立一个内存DC 往这里画,每资画时贴上就可以了,这样软快   可我的是动态的画面,是不是随时要保存?我是一名初学者,这几位大虾说了思路,可我还是不会,老板又催得急,哪位帮帮忙保住我的饭碗,小妹先谢谢了!若有
比较简单的例子更好,
   再一次表示感谢!!!

解决方案 »

  1.   

    1:在程序中建立一个内存兼容DC函数名好象是:CreateCompatibiteDC,得到一个HANDLE,用这个HANDLE当作是DC,在它上面画就行了.
    2:每次你的窗口要进行重画的时候算出你的窗口和这个DC的相对位置然后在此DC中得到一个矩形区域BITBLT过去就行了.
      

  2.   

    你的定时器回调函数不是会画图吗?
    在OnPaint里直接调用它一次不就行了?
      

  3.   

    void CShapeWnd::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting

    int nSize = m_aPoint.GetSize();//m_aPoint是要曲线点数据数组
    if (nSize == 0)
    return; CDC memDC;
    if (!memDC.CreateCompatibleDC(&dc))
    {
    OutputDebugString(_T("CreateCompatibleDC failed"));
    return;
    }

    CRect rcClient;
    GetClientRect(&rcClient);
    int nSrcDelta = rcClient.Width()/m_nDivideV;
    CPen pen;
    pen.CreatePen(PS_SOLID, 1, RGB(128, 255, 255));
    CPen *pOldPen = dc.SelectObject(&pen);

    CPoint ptLast = m_aPoint.GetAt(0);
    dc.MoveTo(ptLast);
    for (int i = 1; i < nSize; i++)
    {
    ptLast = m_aPoint.GetAt(i);
    dc.LineTo(ptLast);
    } dc.SelectObject(pOldPen);

    // dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, SRCCOPY); // Do not call CWnd::OnPaint() for painting messages
    }