?? circletool.cpp
字號:
#include "StdAfx.h"
#include ".\circletool.h"
#include <math.h>
#include "circleobj.h"
#include "visdrawdoc.h"
#include "visdrawview.h"
CCircleTool::CCircleTool(void)
{
}
CCircleTool::~CCircleTool(void)
{
}
CCircleTool::CCircleTool(DrawShape drawShape)
: CDrawTool(drawShape)
{
pObj = NULL;
}
void CCircleTool::OnLButtonDown(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
// TODO: 在此添加消息處理程序代碼和/或調用默認值
double ptx, pty;
CPoint local = point;
//把設備坐標轉化為邏輯坐標
pView->ClientToDoc(local);
pView->ClientToWorld(local, ptx,pty);
if(!m_LMouseDownStep)
{
pObj = new CCircleObj(CRect(local, CSize(0, 0)));
m_LMouseDownStep = 1;
pView->GetDocument()->Add(pObj);
//把第一個點指定為圓心
pObj->SetCenterPoint(ptx,pty);
}
else
{
CDC* dc=pView->GetDC();
dc->SetROP2(R2_COPYPEN);
dc->SelectStockObject(NULL_BRUSH);
double radium;
//計算圓半徑
radium = pObj->CalcRadium(ptx, pty);
pObj->SetRadium(radium);
pObj->CalcBounds(pView);
CRect rect = CalcBounds(point);
dc->Ellipse(rect);
dc->SetROP2(R2_NOT);
dc->MoveTo(lastPoint);
dc->LineTo(point);
pObj = NULL;
m_LMouseDownStep = 0;
pView->ReleaseDC(dc);
}
lastPoint = point;
prePoint = point;
}
void CCircleTool::OnLButtonUp(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
}
void CCircleTool::OnMouseMove(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
// TODO: 在此添加消息處理程序代碼和/或調用默認值
CPoint local = point;
double ptx, pty;
//把設備坐標轉化為邏輯坐標
pView->ClientToDoc(local);
pView->ClientToWorld(local,ptx,pty);
if(m_LMouseDownStep)
{
//申請與視圖窗口相關的設備描述表
CDC* dc=pView->GetDC();
//用屏幕顏色的反色繪圖
dc->SetROP2(R2_NOT);
dc->SelectStockObject(NULL_BRUSH);
switch(m_drawShape)
{
default:
break;
case circleTool:
//繪制前一條直線
dc->MoveTo(lastPoint);
dc->LineTo(prePoint);
//繪制起點到當前鼠標點位置的直線
dc->MoveTo(lastPoint);
dc->LineTo(point);
double radium;
CRect rect;
radium = pObj->CalcRadium(ptx,pty);
pObj->SetRadium(radium);
rect = CalcBounds(prePoint);
dc->Ellipse(rect);
rect = CalcBounds(point);
dc->Ellipse(rect);
break;
}
prePoint = point;
pView->ReleaseDC(dc);
}
}
void CCircleTool::OnLButtonDblClk(CVisDrawView* pView, UINT nFlags, const CPoint& point)
{
}
void CCircleTool::CreateObj(CVisDrawView* pView, const CPoint& point)
{
}
CRect CCircleTool::CalcBounds(CPoint pt)
{
CRect rect;
long dx,dy;
double r;
long Radium;
dx = pt.x - lastPoint.x;
dy = pt.y - lastPoint.y;
r = sqrt((double)(dx*dx+dy*dy));
Radium = (long)r;
rect.top = (long)(lastPoint.y + Radium);
rect.left = (long)(lastPoint.x - Radium);
rect.bottom = (long)(lastPoint.y - Radium);
rect.right = (long)(lastPoint.x + Radium);
return rect;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -