Drawcli分析

来源:互联网 发布:淘宝商城女装风衣 编辑:程序博客网 时间:2024/06/02 14:56

当前环境:windows7 32位旗舰版、VS2010旗舰版

 

Drawcli介绍:

Drawcli是VS2010中的一个示例程序,能够进行简单的绘图操作,例如线、矩形、圆角矩形、多边形等,位于VS安装目录"Microsoft Visual Studio 10.0\Samples\2052\VC2010Samples\C++\MFC\ole\drawcli"下。

 

1、对象的绘画。

void CDrawView::OnDraw(CDC* pDC){ pDoc->Draw(pDrawDC, this);//CDrawDoc::Draw()}void CDrawDoc::Draw(CDC* pDC, CDrawView* pView){ POSITION pos = m_objects.GetHeadPosition(); while (pos != NULL) {  CDrawObj* pObj = m_objects.GetNext(pos);  pObj->Draw(pDC);//绘画图形  if (pView->m_bActive &&  !pDC->IsPrinting() &&  pView->IsSelected(pObj)//判断对象是否在视图的选中列表中,视图使用CDrawObjList m_selection来存储选中图形的指针。  )  {   pObj->DrawTracker(pDC, CDrawObj::selected);//绘画选中图形时的靶点  } }}

2、对象的存储。

通过对象的绘画我们可以知道,对象存储在文档类CDrawDoc的中,即CDrawObjList m_objects中,视图中存储了选中对象的指针在列表中,即CDrawObjList m_selection中。

3、对象的操作。

添加线、添加矩形、添加圆角矩形、添加椭圆等操作由CRectTool类进行处理;添加多边形由CPolyTool类进行处理;操作以存在的对象由CSelectTool类进行处理。 

static CSelectTool selectTool;static CRectTool lineTool(line);static CRectTool rectTool(rect);static CRectTool roundRectTool(roundRect);static CRectTool ellipseTool(ellipse);static CPolyTool polyTool;

这里使用Tool类来完成一个特定功能,例如添加线条、添加矩形、添加多边形等等,有点类似于命令模式,这样做的好处是符合封装的特性,降低耦合度,修改一个功能不影响其他的功能。一般绘图软件都需要这样的类,用tool来处理特定功能的鼠标操作,而在不涉及鼠标操作,可以使用命令模式。

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){if (!m_bActive)return;CDrawTool* pTool = CDrawTool::FindTool(CDrawTool::c_drawShape);if (pTool != NULL){pTool->OnLButtonDown(this, nFlags, point);}}void CDrawView::OnLButtonUp(UINT nFlags, CPoint point){if (!m_bActive)return;CDrawTool* pTool = CDrawTool::FindTool(CDrawTool::c_drawShape);if (pTool != NULL)pTool->OnLButtonUp(this, nFlags, point);}void CDrawView::OnMouseMove(UINT nFlags, CPoint point){if (!m_bActive)return;CDrawTool* pTool = CDrawTool::FindTool(CDrawTool::c_drawShape);if (pTool != NULL)pTool->OnMouseMove(this, nFlags, point);}

在选择不同的功能时,只需要设置CDrawTool::c_drawShape的值,便会在执行鼠标操作时选择相互匹配的工具来进行处理。

void CDrawView::OnDrawSelect()//选择工具{CDrawTool::c_drawShape = selection;}void CDrawView::OnDrawRoundRect()//添加圆角矩形{CDrawTool::c_drawShape = roundRect;}void CDrawView::OnDrawRect()//添加矩形{CDrawTool::c_drawShape = rect;}void CDrawView::OnDrawLine()//添加直线{CDrawTool::c_drawShape = line;}void CDrawView::OnDrawEllipse()//添加椭圆{CDrawTool::c_drawShape = ellipse;}void CDrawView::OnDrawPolygon()//添加多边形{CDrawTool::c_drawShape = poly;}

 

0 0
原创粉丝点击