现在的问题是:
画了一个圆以后,(我是在Cview::OnLButtonUp函数/OnLbuttonDown/OnMouseMove里实现的)
  1、如何当视窗改变大小时,图象能够保存下来?而不会消失?(我这样画出来的图象不能保存)大家是否能够告诉我,不管窗口发生什么变化,图象都能显示不变。
  2、当画出一个圆以后,当用鼠标单击时,圆应该高亮显示,并且,在圆的四周显示出8个黑色点,点击这些小点,圆可以放大或者缩小(这就像在好多画图软件里表现的那样,尤其是在flash里),而且还可以进行圆的平移,删除,放大等功能。  对于第二个问题,我的思路是这样的:将要画的图形:比如说圆,放在picture控件里,这样,进行选定、平移、删除、放大等功能就好操作些。大家认为怎么样?
我的这种想法是否可行?   欢迎大家做出指点!尤其感谢那些带有详细代码并且有详细说明的朋友!分数不够,可以再加!再次表示感谢!

解决方案 »

  1.   

    1、画出来后,把圆所在矩形的坐标保存下来(圆心、半径也行),然后在OnDraw或OnPaint中利用坐标重画
      

  2.   

    第一个:建一个m_pMemDC,在ONDRAW中
    if(某个条件)
    {
    pDC->BitBlt(0,0,m_lWidth,m_lHeight,m_pMemDC,0,0,SRCCOPY);

    }
    第二个:同样,不过是在MOUSEMOVE中Bitblt,关于移动,可以定义一个Rect
    if(Rect.PtInRect(MovePoint))则移动,画线,圆,BITBLT
    关于内存DC,你可以查一下双缓冲,应该可以找得到的.
      

  3.   

    to liuqiyc(cyiquil): 看来也只有这样做了,只不过,这样做的问题是:屏幕闪得很厉害。我调试下。to jh2005() :我已经发给你短信了,请注意查收!to wrcluomo(落木):大虾的方法,正在调试,等会有问题再向你请教,只不过,是否可以再把第二个问题说详细一点,如果带点代码,就好了。
      

  4.   

    孙鑫的教程,专门讲了一下绘图程序:
    http://www.enet.com.cn/eschool/zhuanti/vc++/
      

  5.   

    看下这个吧:
    http://www.cppblog.com/wlwlxj/archive/2005/12/20/1914.aspx
      

  6.   

    代码写的太烂,没组织,将就着看看
    //是否在移动区和拉伸区
    if(!m_bMove&&!m_bExtend)
    {
    //左上右上右下左下四个角点处拉伸
    bool bExtend1,bExtend2,bExtend3,bExtend4;
    bExtend1=bExtend2=bExtend3=bExtend4=false;

    CRect MoveRect;
    GetRect(m_BeginSelectPoint,m_EndSelectPoint,&MoveRect);
    CRect TemRect;
    TemRect.CopyRect(&MoveRect);
    TemRect.DeflateRect(2,2);
    //是否在移动区
    if(TemRect.PtInRect(MovePoint))
    {
    m_nCursorType=CURSOR_MOVE; 
    SetCursor(m_hMoveCursor);
    }

    else
    {
    CPoint LeftUpPoint,RightDownPoint;
    LeftUpPoint=MoveRect.TopLeft();
    RightDownPoint=MoveRect.BottomRight();
    CPoint LeftDownPoint(LeftUpPoint.x,RightDownPoint.y);
    CPoint RightUpPoint(RightDownPoint.x,LeftUpPoint.y);

    CPoint TemLeftUpPoint,TemRightDownPoint;
    TemLeftUpPoint=TemRightDownPoint=LeftUpPoint;
    TemLeftUpPoint.Offset(-2,-2);
    TemRightDownPoint.Offset(2,2);
    CRect ExtendRect1(TemLeftUpPoint,TemRightDownPoint);
    if(ExtendRect1.PtInRect(MovePoint))
    {
    bExtend1=true;
    m_nCursouAngle=1;
    }