(1)圆的参数,圆心和圆上一点,即两个参数可以画一个圆
如下
class CCreateLine : public CComand
{
public:
CCreateLine();
virtual ~CCreateLine();
public:
void OnLButtonDown(UINT nFlags, CPosition pos);
void OnMouseMove(UINT nFlags, CPosition pos);
void OnRButtonDown(UINT nFlags, CPosition pos);
private:
CPosition m_begin;
CPosition m_end;
CEraseLine m_erase_line;//画橡皮筋
};
CCreateCircle::CCreateCircle()
{
m_nStep = 1;
c_Refresh = g_Refresh;
}
CCreateCircle::~CCreateCircle()
{
}
void CCreateCircle::OnLButtonDown(UINT nFlags, CPosition pos)
{
switch(m_nStep)
{
case 1://输出提示信息
{
m_erase_line.SetBegin(pos);//////
CPosition center = pos;
// g_pDoc->DrawFlag(TRUE, pos, ¢er);//画标记
m_end = m_begin = center;
m_nStep++;
break;
}
case 2:
{
m_erase_line.SetBegin(pos);
CDC *pDC = g_pView->GetDC();
CPosition center2 = pos;
// g_pDoc->DrawFlag(TRUE, pos, ¢er2);//画标记
CCircle *ccircel1 = new CCircle(m_begin, center2);
g_pDoc->m_solid.Add(ccircel1);
m_nStep = 1;//重置
g_pView->ReleaseDC(pDC);
break;
}
default:
break;
}
}
void CCreateCircle::OnMouseMove(UINT nFlags, CPosition pos)
{
CPosition center2;
// g_pDoc->DrawFlag(TRUE, pos, ¢er2);
switch(m_nStep)
{
case 2:
m_erase_line.SetEnd(pos);
if (c_Refresh != g_Refresh)
{
m_end = m_begin;
c_Refresh = g_Refresh;
}
CDC *pDC = g_pView->GetDC();
CCircle *ccircel1 = new CCircle(m_begin, m_end);
ccircel1->DrawSolid(pDC, Drag);
delete ccircel1;
CCircle *ccircel2 = new CCircle(m_begin, pos);//画像皮线,最后一个
ccircel2->DrawSolid(pDC,Normal);
delete ccircel2;
m_end = pos;
g_pView->ReleaseDC(pDC);
break;
}
}
void CCreateCircle::OnRButtonDown(UINT nFlags, CPosition pos)
{
CDC *pDC = g_pView->GetDC();
CCircle *ccircel2 = new CCircle(m_begin, pos);//画像皮线,最后一个
ccircel2->DrawSolid(pDC,Back);
delete ccircel2;
g_pView->ReleaseDC(pDC);
m_nStep = 1;
}
(2)画矩形,左上角和右下角两个参数即可确定一个圆
画圆的命令如下
class CCreateRect : public CComand
{
public:
CCreateRect();
virtual ~CCreateRect();
public:
void OnLButtonDown(UINT nFlags, CPosition pos);
void OnMouseMove(UINT nFlags, CPosition pos);
void OnRButtonDown(UINT nFlags, CPosition pos);
private:
CPosition m_begin;
CPosition m_end;
};
CCreateRect::CCreateRect()
{
m_nStep = 1;
c_Refresh = g_Refresh;
}
CCreateRect::~CCreateRect()
{
}
void CCreateRect::OnLButtonDown(UINT nFlags, CPosition pos)
{
switch(m_nStep)
{
case 1://输出提示信息
{
CPosition center = pos;
// g_pDoc->DrawFlag(TRUE, pos, ¢er);//画标记
m_end = m_begin = center;
m_nStep++;
break;
}
case 2:
{
CDC *pDC = g_pView->GetDC();
CPosition center2 = pos;
// g_pDoc->DrawFlag(TRUE, pos, ¢er2);//画标记
CCRect *ccircel1 = new CCRect(m_begin, m_end);
g_pDoc->m_solid.Add(ccircel1);
m_nStep = 1;//重置
g_pView->ReleaseDC(pDC);
break;
}
default:
break;
}
}
void CCreateRect::OnMouseMove(UINT nFlags, CPosition pos)
{
switch(m_nStep)
{
case 2:
if (c_Refresh != g_Refresh)
{
m_end = m_begin;
c_Refresh = g_Refresh;
}
CDC *pDC = g_pView->GetDC();
CCRect *ccircel1 = new CCRect(m_begin, m_end);
ccircel1->DrawSolid(pDC, Drag);
delete ccircel1;
CCRect *ccircel2 = new CCRect(m_begin, pos);//画像皮线,最后一个
ccircel2->DrawSolid(pDC,Normal);
delete ccircel2;
m_end = pos;
g_pView->ReleaseDC(pDC);
break;
}
}
void CCreateRect::OnRButtonDown(UINT nFlags, CPosition pos)
{
CDC *pDC = g_pView->GetDC();
CCRect *ccircel2 = new CCRect(m_begin, pos);//画像皮线,最后一个
ccircel2->DrawSolid(pDC,Back);
delete ccircel2;
g_pView->ReleaseDC(pDC);
m_nStep = 1;
}