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
- Drawcli分析
- DRAWCLI
- DrawCli代码中双缓冲,裁剪区技术以及坐标变换等技术分析
- DrawCli代码中双缓冲,裁剪区技术以及坐标变换等技术分析
- 给微软DrawCli例子添加Redo和Undo功能,使用Command设计模式。
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 大家帮忙分析分析!
- FFMpeg分析详细分析
- FFMpeg分析详细分析
- core 分析的分析
- Varargs可变参数
- Q23:从上往下打印二叉树
- Textural Features for Image Classification
- 【Hibernate学习笔记】软件的模型
- Excel 删除重复值 一个不留
- Drawcli分析
- shell脚本学习指南笔记(第二章)
- 用小毛桃破解Window7 64位旗舰版 Administrator密码
- Ubuntu 12.04安装Google Chrome
- 百度硬盘和Google桌面的比较
- IIS 您无权查看该网页
- 我的网页模板抓取程序
- 链表的逆置
- 线性回归和正则化(Regularization)