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);
}