c++绘图软件<一>
准备写一个绘图软件,参考了三层架构(表现层、业务逻辑层、数据访问层)。
//////////////////////////////////////////////////////////////////////////
// 类说明:
// 实体图元抽象基类,其派生类只存储数据和进行必要的数据维护,类似于
// 数据类,其他工作例如:绘画、序列化等由其他类进行处理。
//////////////////////////////////////////////////////////////////////////
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++绘图软件<一>的更多相关文章
- gnuplot: 一种更为简洁的曲线,柱状图绘图软件
gnuplot: 一种更为简洁的曲线,柱状图绘图软件 gnuplot: 一种更为简洁的曲线,柱状图绘图软件 Zhong Xiewei Wed Jun 25 gnuplot简单介绍 关于gnuplot的 ...
- Smartdraw世界上最流行的商业绘图软件
Smartdraw 更多图片(5张) SmartDraw是世界上最流行的商业绘图软件.2006 年获美国政府司法部 (U.S. Department of Justice) 专用软件,2007获美国政 ...
- 一款好用的绘图软件gnuplot
漂亮的图片在一篇报告中是必不可少的.这里推荐一款绘图软件Gnuplot. Gnuplot是一种免费分发的绘图工具,可以移植到各种主流平台,无论是在Linux还是在Windows都易于安装使用.最新的版 ...
- Ubuntu 16.04 安装GIMP绘图软件
Ubuntu上比较好用的绘图软件,GIMP,安装方法如下: 终端输入 : sudo apt-get install gimp ,回车,输入密码,即可安装简单易行. 输入 :gimp ,启动程序.
- Mac 设计师必备的设计绘图软件 推荐与下载
Mac设计师必备的设计绘图软件,为广大设计师推荐一些Mac上实用且强大的软件,使用好的软件,事半功倍,设计出精美的作品. Mac上优秀的设计类软件非常多,绝对不止这几款软件,看看以下内容,希望对你有帮 ...
- 化学绘图软件ChemDraw真的什么都能干!
今天要介绍的就是一款无所不能的化学绘图软件——ChemDraw,绘制平面化学结构.生成立体化学模型.查询化学信息.编写化学脚本.计算化学数据等等,堪称化学界的必备神器. 化学软件ChemDraw免费获 ...
- 使用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 ...
- AutoCAD 2019 for mac 非常好用的CAD三维设计绘图软件
macOS下用什么cad软件?mac在哪下载cad软件? AutoCAD 2019 for mac 是一款非常好用的CAD三维设计绘图软件,可应用三维建模.CAD.渲染.动画.视觉特效和数字图像. A ...
- 【优秀的设计绘图软件】Affinity Designer Beta for Mac 1.7
[简介] Affinity Designer 1.7 beta 中文版本,具有全新的UI界面和功能,支持最新的 macOS Mojave 10.14 系统,Affinity Designer是 ...
随机推荐
- hdu_5903_Square Distance(dp)
题目链接:hdu_5903_Square Distance 题意: 给你一个长度为n的a串,一个数m,现在让你构造一个长度也为n的b串,使这个串是由两个相同的串拼起来的,并且和a串对应的位不同的数量为 ...
- delphi edit 中undo 和clearundo 复制粘贴等总结
edit 和memo都有undo功能, Undo:恢复到改动前. ClearUndo:撤销掉Undo缓冲区的内容,则将无法恢复到改动前的 从该文本框的撤销缓冲区中清除关于最近操作的信息,根据应用 程序 ...
- 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)
使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了, ...
- Matlab - 矩阵元素引用
>> A = [ ; ; ] A = 1. 选择第m行n列的元素 >> A(,) ans = 2. 选择第i列所有元素 >> A(:,) ans = 3. 选择第j ...
- Openjudge-计算概论(A)-人民币支付
描述: 从键盘输入一指定金额(以元为单位,如345),然后输出支付该金额的各种面额的人民币数量,显示100元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的钞票. 输入一个小于100 ...
- java的String类型为什么是final
(转自:http://www.cnblogs.com/ikuman/archive/2013/08/27/3284410.html) 最佳答案: 主要是为了“效率” 和 “安全性” 的缘故.若 Str ...
- Keyboard Test Utility v1.0.1.0 电脑键盘测试软件绿色版
软件名称: 电脑键盘测试软件绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win8 / Win7 / Vista / WinXP软件大小: 917KB图片预览: 软件简介:Keyboard ...
- 写一个CGI程序并运行
准备Linux和Apache我在/var/www/cgi-bin/下建一个文件get.c #include <stdio.h> #include <stdlib.h> int ...
- 利用pscp命令实现linux与windows文件互传
windows==>linux(单个文件) PrivateKey.ppk(私钥)可以是相对路径或者绝对路径pscp -i D:\PrivateKey.ppk D:\xxx.xx root@123 ...
- 【第三篇】学习 android 事件总线androidEventbus之list数据事件的传递,发送list数据事件到另外一个Activity
这个和普通的事件总线的发送接收一样. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.uti ...