转载:橡皮圆

void   CDrawImageView::OnLButtonDown(UINT   nFlags,   CPoint   point)    
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
          CClientDC               ddd(this);  
  if(GetDrawMode()==DRAWCIRCLE)  
  {  
   
            CClientDC               ddd(this);  
            RECT   rect;  
                    GetClientRect(&rect);   //获取视图窗口客户区的坐标  
            ClientToScreen(&rect);//转换客户区坐标为屏幕坐标  
            ClipCursor(&rect);         //将光标限定在视图窗口客户区内  
                    m_PointOld=point;  
            PushNumb++;  
          if(PushNumb==1)  
  {  
  m_pCircleCenterPoint=point;  
  }  
          if(PushNumb==2)  
  {  
  CDrawImageDoc*       pDoc=GetDocument();  
                          m_pCircleEdgePoint=point;  
          ddd.SetROP2(R2_NOTXORPEN);  
          float   Radius=float(sqrt(pow((m_pCircleCenterPoint.x-m_pCircleEdgePoint.x),2)+pow((m_pCircleCenterPoint.y-m_pCircleEdgePoint.y),2)));  
   
                  ///  
                  /  
          ///用来填充白色背景的圆///  
                  CPen   Pen(   PS_SOLID,   1,   RGB(1,1,1));//生成当前绘图色的画笔  
                          CPen*   poldPen   =   ddd.SelectObject(   &Pen   );  
                        ddd.Ellipse(int(m_pCircleCenterPoint.x-Radius),int(m_pCircleCenterPoint.y-Radius),int(m_pCircleCenterPoint.x+Radius),int(m_pCircleCenterPoint.y+Radius));  
                          ddd.SelectObject(   poldPen   );//保留原画笔(这句很重要,在进行dc操作时要时刻记着恢复原有设置)  
                  //  
                  //  
          GetRadiusValue(Radius);               //把圆半径写入编辑框  
          pDoc->AddCircle(float(m_pCircleCenterPoint.x),float(m_pCircleCenterPoint.y),Radius,m_pCircleColor);  
          CPen       pen(PS_SOLID,1,m_pCircleColor);  
          CPen*     pOldPen=ddd.SelectObject(&pen);  
          ddd.MoveTo(m_pCircleCenterPoint);  
          ddd.LineTo(m_PointOld);  
   
          PushNumb=0;  
          ClipCursor(NULL);  
                          ReleaseCapture();  
          ddd.SelectObject(pOldPen);  
  }  
                  //往对话框中写圆心坐标  
  GetPositionX(float(point.x));       //往对话框中写圆心X坐标  
  GetPositionY(float(point.y));       //往对话框中写圆心Y坐标  
  }  
  
  CView::OnLButtonDown(nFlags,   point);  
  }  
     //**********************************************************************************************************//

      void   CDrawImageView::OnMouseMove(UINT   nFlags,   CPoint   point)    
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
     
  SetCursor(m_hCursor);  
          CClientDC               ddd(this);  
          if(GetDrawMode()==DRAWCIRCLE)  
  {  
   
          if(PushNumb==1)  
  {  
  CDrawImageDoc*       pDoc=GetDocument();  
                  CClientDC               ddd(this);  
                          CPen                         pen(PS_SOLID,1,m_pCircleColor);  
                          CPen*                       pOldPen=ddd.SelectObject(&pen);  
                  ddd.SetROP2(R2_NOTXORPEN);  
   
                          float   Radius=float(sqrt(pow((m_pCircleCenterPoint.x-m_PointOld.x),2)+pow((m_pCircleCenterPoint.y-m_PointOld.y),2)));  
                  ddd.Ellipse(int(m_pCircleCenterPoint.x-Radius),int(m_pCircleCenterPoint.y-Radius),int(m_pCircleCenterPoint.x+Radius),int(m_pCircleCenterPoint.y+Radius));  
           
                          ddd.MoveTo(m_pCircleCenterPoint);  
                          ddd.LineTo(m_PointOld);  
       
                          Radius=float(sqrt(pow((m_pCircleCenterPoint.x-point.x),2)+pow((m_pCircleCenterPoint.y-point.y),2)));  
                          GetRadiusValue(Radius);         //把圆半径写入编辑框  
   
                          ddd.Ellipse(int(m_pCircleCenterPoint.x-Radius),int(m_pCircleCenterPoint.y-Radius),int(m_pCircleCenterPoint.x+Radius),int(m_pCircleCenterPoint.y+Radius));  
                          ddd.MoveTo(m_pCircleCenterPoint);  
                  ddd.LineTo(point);  
                  m_PointOld=point;  
                  pDoc->SetModifiedFlag();          
                          ddd.SelectObject(pOldPen);  
  }  
  }

  CView::OnMouseMove(nFlags,   point);  
  }  
    //***********************************************************************************************************************// 
  void   CDrawImageView::OnRButtonDown(UINT   nFlags,   CPoint   point)    
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
  if(GetDrawMode()==DRAWCIRCLE)  
  {  
  CClientDC               ddd(this);  
   
          if(PushNumb==1)  
  {  
  CDrawImageDoc*       pDoc=GetDocument();  
   
                  CClientDC               ddd(this);  
          CPen                         pen(PS_SOLID,1,m_pCircleColor);  
                  CPen*                       pOldPen=ddd.SelectObject(&pen);  
                  ddd.SetROP2(R2_NOTXORPEN   );  
   
                          float   Radius=float(sqrt(pow((m_pCircleCenterPoint.x-point.x),2)+pow((m_pCircleCenterPoint.y-point.y),2)));  
                          ddd.Ellipse(int(m_pCircleCenterPoint.x-Radius),int(m_pCircleCenterPoint.y-Radius),int(m_pCircleCenterPoint.x+Radius),int(m_pCircleCenterPoint.y+Radius));  
                          ddd.MoveTo(m_pCircleCenterPoint);  
                  ddd.LineTo(point);  
          PushNumb=0;  
  GetRadiusValue(0.000000);  
                          ReleaseCapture();  
          ClipCursor(NULL);  
                  ddd.SelectObject(pOldPen);  
  }  
  }  
  CView::OnRButtonDown(nFlags,   point);  
  } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值