我在子窗口中绘图,只要一改变子窗口的大小,我画出的图形就不见了,这是为何?即使我响应了ON_WM_ERASEBKGND消息,并在消息处理函数中添加了绘图函数(这个函数是一个单独的类成员函数),为何还是不行(但是此时的现象是我要画的图形闪一下就消失了)??ON_WM_ERASEBKGND对子窗口无效吗??请大家解释一下,谢谢了!

解决方案 »

  1.   

    在OnDraw中画,当使用子窗口右边的ScrollBar的时候,画的图就花了,不信你试试?还有没有其他的解决方法了?
      

  2.   

    创建一个内存DC,先画到内存DC,然后在OnDraw中画到客户区
      

  3.   

    好用BOOL CMy121View::OnEraseBkgnd(CDC* pDC) 
    {
    CView::OnEraseBkgnd(pDC);

    try
    {

    CDC dcMem;//draw left
    CClientDC dc(this);
    HBITMAP hbit;
    dcMem.CreateCompatibleDC(&dc);
    hbit = (HBITMAP)dcMem.SelectObject(m_bitmap);
    GetDC()->BitBlt(0,0,210,600,&dcMem,0,0,SRCCOPY);


    CDC dcMem2;//draw top
    CClientDC dc2(this);
    HBITMAP hbit2;
    dcMem2.CreateCompatibleDC(&dc2);
    hbit2 = (HBITMAP)dcMem2.SelectObject(m_top);
    GetDC()->BitBlt(210,0,800,20,&dcMem2,0,0,SRCCOPY);

    }

    catch(CException err)
    {
    CString errmsg;
    err.GetErrorMessage(errmsg.GetBuffer(errmsg.GetLength()),255);
    MessageBox("初始化失败,错误信息为:\n"+errmsg+"\n,请记录下错误信息并与程序供应商联系!","失败",MB_ICONINFORMATION|MB_OK);
    exit(-1);
    }

    return 0;
    }
      

  4.   

    推荐在OnDraw()中画,通过Invalidae()来触发。
      

  5.   

    如果你在OnEraseBkgnd中绘制的话,最好在 OnDraw 里面直接返回,什么不要做
      

  6.   

    在其他的情况下我的图形都可以保持了,但是为何我一拖动子窗口的边框的时候,图形就不见了???并且非要等到我强行激活OnDraw或者OnPaint之后,图形才能恢复。请问有没有什么办法让我拖动子窗口的边框的时候,也能保持图形? 我试过了,在WM_SIZE事件中绘图是要出错的,各位大侠请救命啊,谢谢了。