画图后如何避免最小化后图形消失?

解决方案 »

  1.   

    响应刷新消息重绘,对于文档视图类在视图的OnDraw中绘图;对于对话框在OnPaint中绘图。
      

  2.   

    我的基类是EDit,在OnDraw中无效果,在OnPaint中加代码,结果一运行程序就有效果。我的那个绘图函数是test(),能具体讲讲吗?
      

  3.   

    test()函数放OnDraw()里面,需要重绘时用Invalidate();
      

  4.   

    一般要声明一个在OnDraw里面绘图的函数都这样声明:
    void test(CDC* pDC ) //传OnDraw函数参数当中的pDC绘图句柄指针过去
    {
        pDC->MoveTo();    //使用这个绘图指针绘图
        pDC->LineTO();
        //...........
    }如果你在别的地方绘图,比如在LButtonDown里面绘图的时候;
    一般都是临时得到绘图指针来绘图:
        CDC* pdc = GetDC();
        pdc->MoveTo();    //使用这个绘图指针绘图
        pdc->LineTO();
       pdc->ReleaseDC();   //释放指针
    在OnLButtonDown这样的函数里面绘图是不能持久的。 要想保证持久就必须在OnDraw或者OnPaint里面去绘图。
    这样每次视图刷新的时候 视图类都只要要画那些东西。刷新是不定时的,只要系统需要的时候就会刷新,最小化
    在最大化的过程系统就需要刷新。 要想自己触发刷新命令可以使用Invalidate 但是不提倡 这样会造成视图闪烁要想不闪烁,可以在OnDraw和OnPaint以后 视图变化较多的地方使用内存绘图。   
      

  5.   

    不是避免,应该是必须这样做
    把绘制代码写在OnDraw或者OnPaint里面
      

  6.   

    1.在onpaint中加代码:
    void test(CDC* pDC ) //传OnDraw函数参数当中的pDC绘图句柄指针过去
    {
        pDC->MoveTo();    //使用这个绘图指针绘图
        pDC->LineTO();
        //...........
    }
    2.在你最小化时,例如响应鼠标左键lbuttondown消息时,invalidate(),系统发送wm-paint消息进行重绘.