我喜欢用对话框画图而不是用单文档画图。我在对话框上用画笔和画刷画好图,将对话框最小化,再还原,原来画的东西就会消失,也就是说,系统没有对我的客户区重画,我应该怎么样才能保存我的东西不消失呢?

解决方案 »

  1.   

    保存一下,存在一个结构里,收到WM_PAINT消息时候再重画一下。
      

  2.   

    在OnPaint中画图就不会丢失了,也就是保存在其他消息中画的数据然后在OnPaint中根据数据绘图.在其他消息中用Invalidate()调用OnPain()来刷新
      

  3.   

    最好用内存dc,画的时候画在内存里,然后在OnPaint时将内存dc再画到实际dc,这样既能保证不消失,又能使图像无抖动~~
      

  4.   

    msdn上的drawcli例子就是最好的源码,不过是SDI,道理是一样的
      

  5.   

    你要把你画的一横一竖都保存起来
    然后放到OnPaint里绘出来
      

  6.   

    但是,用什么来保存呢?怎么保存?晚辈还是不懂!
    怎么把对话框上某一块地方的内容保存在bmp文件中?
    还有,drawcli例子太大,我一下难看懂
    希望能够具体一点,谢谢
      

  7.   

    drawcli为例:
    做一个图元的基类(CDrawObj),基类派生子类,子类有自己的draw方法(虚函数)。每个具体的图元都是一个子类对象。CDrawDoc下保存图元在CDrawObjList类型的链表里。需要重绘时,只要遍里CDrawObjList链表,每个图元对象draw一下就可以了。
      

  8.   

    请问hwonzor(闲人),这样会不会很耗内存?
    谢谢
      

  9.   

    在OnDraw中:
    CPen pen;
    pen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); CDC memDC;
    CBitmap bmp;
    bmp.CreateCompatibleBitmap(pDC, 200, 200);
    memDC.CreateCompatibleDC(pDC);
    memDC.SelectObject(&bmp); memDC.SelectObject(&pen); memDC.MoveTo(0, 0);
    memDC.LineTo(200, 200); pDC->BitBlt(0, 0, 500, 500, &memDC, 100, 100, SRCCOPY); memDC.DeleteDC();
    bmp.DeleteObject();
    pen.DeleteObject();你可以把memdc的创建放在OnCreate里