准备写一个绘图软件,参考了三层架构(表现层、业务逻辑层、数据访问层)。

//////////////////////////////////////////////////////////////////////////
// 类说明:
// 实体图元抽象基类,其派生类只存储数据和进行必要的数据维护,类似于
// 数据类,其他工作例如:绘画、序列化等由其他类进行处理。
//////////////////////////////////////////////////////////////////////////
class IShape : public IEntity
{
}; //////////////////////////////////////////////////////////////////////////
// 线图元
//////////////////////////////////////////////////////////////////////////
class CLine : public IShape
{
}; //////////////////////////////////////////////////////////////////////////
// 矩形图元
//////////////////////////////////////////////////////////////////////////
class CRectangle : public IShape
{
};
//////////////////////////////////////////////////////////////////////////
// 类说明:
// 图元控制类
// 有很多时候我们会碰到这个问题,灯泡是一个实体类,他自己维护了必要
// 的数据,并提供了一些基本操作,如:开灯/关灯。但是这个灯泡由谁来安装
// 呢?一般来说是人,人可以做很事情,这样人就成为了上帝类,难以维护,
// 所以引进了图元控制类,用来管理多个对象和处理一些不属于实体类的操作。
//////////////////////////////////////////////////////////////////////////
class CControlShape
{
}; //////////////////////////////////////////////////////////////////////////
// 类说明:
// 线控制类
//////////////////////////////////////////////////////////////////////////
class CControlLine : public CControlShape
{
};
//////////////////////////////////////////////////////////////////////////
// 类说明:
// 绘图抽象基类,从实体图元类对象中获取数据进行显示,其他具体绘画类都
// 有此基类派生
//////////////////////////////////////////////////////////////////////////
class IDrawShape
{
}; //GDI绘画抽象基类
class IGdiDrawShape : public IDrawShape
{
}; //GDI画线
class CGdiDrawLine : public IGdiDrawShape
{
};
//GDI画矩形
class CGdiDrawRectangle : public IGdiDrawShape
{
};
//////////////////////////////////////////////////////////////////////////
// 类说明:
// 实体工厂类,用户将一个枚举类型标示(实体类型,存储与IEntity中,每个
// 实体存储的值都不一样),与一个创建函数关联起来,例如:我们可以通过实体
// 类型,来创建与此想关联的对象
//////////////////////////////////////////////////////////////////////////
class CEntityFactory
{
};
//暂时拥有两个实体工厂对象。
//1、用于通过实体类型来创建图元。
//2、用于通过实体类型来创建相关联的绘画对象。
//////////////////////////////////////////////////////////////////////////
// 类说明:
// 管理所有对象的绘画
// 参数说明:
// T,绘画基类,不能为IDrawShape
// DeviceContext,绘画设备上下文
// 示例:
// CEntityFactory entiryDrawMap;
// CDrawShapeManage<IGdiDrawShape, Gdiplus::Graphics> drawManage;
// Gdiplus::Graphics g;
//
// 注册实体与绘画对象之间的映射关系
// RegisterEntityDrawMap<IGdiDrawShape>(&entiryDrawMap);
// 设置实体绘画映射
// drawManage.SetEntityDrawMap(&entiryDrawMap);
// 创建绘画对象,并关联实体(绘画对象通过实体指针获取实体数据)
// drawManage.RelationDrawEntity(&controlManage);
// //进行绘画
// drawManage.Draw(&g);
//////////////////////////////////////////////////////////////////////////
template<typename T, typename DeviceContext>
class CDrawShapeManage
{
}:
//////////////////////////////////////////////////////////////////////////
// tool抽象基类,用来完成特定的鼠标操作。
//////////////////////////////////////////////////////////////////////////
class ITool
{
}; //////////////////////////////////////////////////////////////////////////
// 类说明:
// 选择工具,选择对象,使用鼠标操作对象。
//////////////////////////////////////////////////////////////////////////
class CSelectTool : public ITool
{
}; //////////////////////////////////////////////////////////////////////////
// 类说明:
// 添加线工具,使用鼠标添加线。
//////////////////////////////////////////////////////////////////////////
class CAddLineTool : public ITool
{
};

c++绘图软件<一>的更多相关文章

  1. gnuplot: 一种更为简洁的曲线,柱状图绘图软件

    gnuplot: 一种更为简洁的曲线,柱状图绘图软件 gnuplot: 一种更为简洁的曲线,柱状图绘图软件 Zhong Xiewei Wed Jun 25 gnuplot简单介绍 关于gnuplot的 ...

  2. Smartdraw世界上最流行的商业绘图软件

    Smartdraw 更多图片(5张) SmartDraw是世界上最流行的商业绘图软件.2006 年获美国政府司法部 (U.S. Department of Justice) 专用软件,2007获美国政 ...

  3. 一款好用的绘图软件gnuplot

    漂亮的图片在一篇报告中是必不可少的.这里推荐一款绘图软件Gnuplot. Gnuplot是一种免费分发的绘图工具,可以移植到各种主流平台,无论是在Linux还是在Windows都易于安装使用.最新的版 ...

  4. Ubuntu 16.04 安装GIMP绘图软件

    Ubuntu上比较好用的绘图软件,GIMP,安装方法如下: 终端输入 : sudo apt-get install gimp ,回车,输入密码,即可安装简单易行. 输入 :gimp ,启动程序.

  5. Mac 设计师必备的设计绘图软件 推荐与下载

    Mac设计师必备的设计绘图软件,为广大设计师推荐一些Mac上实用且强大的软件,使用好的软件,事半功倍,设计出精美的作品. Mac上优秀的设计类软件非常多,绝对不止这几款软件,看看以下内容,希望对你有帮 ...

  6. 化学绘图软件ChemDraw真的什么都能干!

    今天要介绍的就是一款无所不能的化学绘图软件——ChemDraw,绘制平面化学结构.生成立体化学模型.查询化学信息.编写化学脚本.计算化学数据等等,堪称化学界的必备神器. 化学软件ChemDraw免费获 ...

  7. 使用wpaint绘图软件时:Uncaught DOMException: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image argument is a canvas element with a width or height of 0.

    使用wpaint绘图软件时:Uncaught DOMException: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': Th ...

  8. AutoCAD 2019 for mac 非常好用的CAD三维设计绘图软件

    macOS下用什么cad软件?mac在哪下载cad软件? AutoCAD 2019 for mac 是一款非常好用的CAD三维设计绘图软件,可应用三维建模.CAD.渲染.动画.视觉特效和数字图像. A ...

  9. 【优秀的设计绘图软件】Affinity Designer Beta for Mac 1.7

        [简介] Affinity Designer 1.7 beta 中文版本,具有全新的UI界面和功能,支持最新的 macOS Mojave 10.14 系统,Affinity Designer是 ...

随机推荐

  1. android listen

    android监听机制,应该是一种观察者模式. 摘抄网上教程,观察者模式的结构如下: 其中涉及的角色有: ● 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如A ...

  2. 如何将编译出来的images拷贝到windows下面刷机

    由于SPRD的刷机工具ResearchDownload运行在window环境下:这样,我们平时在开发环境下编译出来的镜像文件就不能直接用于刷机了. 这里涉及到一个双系统中文件共享的方法.由于企业信息安 ...

  3. java的静态方法的使用

    静态的方法和属性,你可以这么理解,就是所有对象公用的,比如一个属性是这样定义的: private static String name; 那么他的意思就是说,因为他是静态的,我所有的对象的name属性 ...

  4. 通过实例来理解ajax

    点击一个按钮,然后将信息显示到指定的div内. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"& ...

  5. elasticsearch 批量插入

    将下面数据写入requests { "create": { "_index": "index1", "_type": & ...

  6. ==、equals、hashCode区别?

    [==.equals().hashCode()区别?] 1)== 运算符用来比较两个变量的值是否相等. 即该运算符用于比较变量对应得内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是 ...

  7. nodejs【伪】入门教程

    声明: 本文适合白的不能再白的小白 不要被标题误导,本文不会讲nodejs基础,只是本人学习流程和资料的一个整合 如果想找一大堆教程自己看,没有电梯,自己拉到文章最下方吧   一.nodejs是什么 ...

  8. TCP/IP,http,socket,长连接,短连接

    TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. 在应 ...

  9. Angularjs中的ng-class

    在angular中为我们提供了3种方案处理class:1:scope变量绑定.(不推荐使用)2:字符串数组形式.3:对象key/value处理. 我们继续其他两种解决方案:1字符串数组形式是针对cla ...

  10. [转]Flash、Flex、AS3.0框架及类库资源收集之十全大补

    原文地址:http://www.d5power.com/portal.php?mod=view&aid=27 APIs.Libs.Components1.as3ebaylibhttp://co ...