我有看到这样的例子,很多很多,我看到过两种:
一:利用CMetaFile元件来保存数据,这个我记的不是很清楚;
二:自己建立一个类
1.CShape.h
2.CShape.cpp
用来保存各个图形的数据;
具体参考:<<VISUAL C++ 开发教程>>,清华大学出版社,微软系列培训教材,里面有原码:)

解决方案 »

  1.   

    也可以用一个内存DC来解决,往内存DC上画,然后再转到屏幕上。然后在合适的时候重新把内存DC转到屏幕上就可以了。
      

  2.   

    在最大化时,会触发wm_size消息,此时重新计算矩形大小及位置,并在on_draw中写绘制矩形的代码。这样,最大化后将重绘矩形并出现在恰当的位置。
      

  3.   

    在OnSize()函数中调用OnDraw()函数。
      

  4.   

    比如我画了N个矩形(有重叠的),我没有记录每个矩形的数据,此时我能否在最大(小)化时保证我的图象不丢失呢?
    我刚刚看了五子棋的代码,他将每个点的位置记录了下来,但我这里没有记录所画的矩形的各种数据,是否有可能保存呢?
    我的矩形是点一次鼠标出现一个举行,重叠的部分混合,这样的话我似乎不能用DC一次画到屏幕上去的。
      

  5.   

    程序在文档类对象中永久存放矩形数据后,窗口重绘时视图类可以用这个数据恢复矩形。试图窗口需要重绘时,系统清除窗口,在调用视图类的OnDraw成员函数。必须在应用程序向导生成的最小OnDraw函数中加入自己的重绘代码。为此,在程序名-View.cpp文件的C文件名View::OnDraw函数中加入函数行:
    void CMiniDrawView::OnDraw(CDC* pDC)
    {
       CMiniDrawDoc* pDoc=GetDocument();
       ASSERT_VALID(pDoc);   //TODO:add draw code for native date here
       int Index=pDoc->GetNumRectangles();
       while(Index--)
          pDoc->GetRectangle(Index)->Draw(pDC);
    }
      

  6.   

    "pDoc->GetRectangle(Index)->Draw(pDC);"中其中:Draw(CDC*) 函数是自定义的吗?这即不是Serialize也难以令人肯定是绘图  :)
      

  7.   

    //TODO:以上部分为程序自动生成,只有一下部分才是自己加进去的。加入的代码调用C程序名Doc::GetRectangle函数取得对应CRectangle对象的指针,然后用这个指针调用CRectangle::Draw函数来画矩形。