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

//////////////////////////////////////////////////////////////////////////
// 类说明:
// 实体图元抽象基类,其派生类只存储数据和进行必要的数据维护,类似于
// 数据类,其他工作例如:绘画、序列化等由其他类进行处理。
//////////////////////////////////////////////////////////////////////////
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. LeetCode OJ 119. Pascal's Triangle II

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  2. Bmob Androidstudio配置

    AndroidStudio配置 鉴于目前Google官方推荐使用 Android Studio 进行Android项目开发,自 V3.4.2 开始,Bmob Android SDK 可以使用Gradl ...

  3. c题 Registration system

    Description A new e-mail service "Berlandesk" is going to be opened in Berland in the near ...

  4. 《实战Java高并发程序设计》pdf

    花了我五元大洋,需要的拿去吧.百度云盘:https://pan.baidu.com/s/1o8bESY2

  5. MySQL密码破解。

    与其说是mysql密码破解倒不如说是mysql密码重置更准确,因为大多数情况下我们只是忘了登录的密码,如果是普通用户还可以让管理员重新设置一下密码或者重新分配一个用户,但是这里我们不考虑普通用户,如果 ...

  6. WebService使用入门(包括发布服务,调用服务)

    WebService是基于SOAP协议的,全称是Simple Object Access Protocol(简单对象访问协议). SOAP不是什么神奇的东西,等于HTTP+XML,即在HTTP协议的基 ...

  7. 多工段查询存放到DataTable到List<DataTable>集合在C#里面做汇总

    private void btnQuery_Click(object sender, EventArgs e) { if (cboxFactory.Text=="") { Mess ...

  8. html5学习(一) video字段

    html5对视频的支持: html5通过<video></video>字段实现web页面上视频的播放功能. 目前各大浏览器对<video>字段的支持: 当前,vid ...

  9. PAT 天梯赛 L2-007 家庭房产

    建图+DFS 题目链接:https://www.patest.cn/contests/gplt/L2-007 题解 在热身赛的时候没有做出来,用的并查集的思想,但是敲残了,最后也没整出来.赛后听到别人 ...

  10. MYSQL超时连接问题(com.mysql.jdbc.MysqlIO.readFully)

    应用服务器连接mysql,有时候会出现以下异常: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.jav ...