EasyX 简易绘图工具接口整理
EasyX Library for C++ (Ver:20190415(beta))
http://www.easyx.cn
EasyX.h
1 #pragma once
2
3 #ifndef WINVER
4 #define WINVER 0x0400 // Specifies that the minimum required platform is Windows 95 and Windows NT 4.0.
5 #endif
6
7 #ifndef _WIN32_WINNT
8 #define _WIN32_WINNT 0x0500 // Specifies that the minimum required platform is Windows 2000.
9 #endif
10
11 #ifndef _WIN32_WINDOWS
12 #define _WIN32_WINDOWS 0x0410 // Specifies that the minimum required platform is Windows 98.
13 #endif
14
15 #if defined(UNICODE)
16 #pragma comment(lib,"EasyXw.lib")
17 #else
18 #pragma comment(lib,"EasyXa.lib")
19 #endif
20
21
22 #ifndef __cplusplus
23 #error EasyX is only for C++
24 #endif
25
26 #include <windows.h>
27 #include <tchar.h>
28
29 // 绘图窗口初始化参数
30 #define SHOWCONSOLE 1 // 创建图形窗口时,保留控制台的显示
31 #define NOCLOSE 2 // 没有关闭功能
32 #define NOMINIMIZE 4 // 没有最小化功能
33
34 // 颜色
35 #define BLACK 0
36 #define BLUE 0xAA0000
37 #define GREEN 0x00AA00
38 #define CYAN 0xAAAA00
39 #define RED 0x0000AA
40 #define MAGENTA 0xAA00AA
41 #define BROWN 0x0055AA
42 #define LIGHTGRAY 0xAAAAAA
43 #define DARKGRAY 0x555555
44 #define LIGHTBLUE 0xFF5555
45 #define LIGHTGREEN 0x55FF55
46 #define LIGHTCYAN 0xFFFF55
47 #define LIGHTRED 0x5555FF
48 #define LIGHTMAGENTA 0xFF55FF
49 #define YELLOW 0x55FFFF
50 #define WHITE 0xFFFFFF
51
52 // 定义颜色转换宏
53 #define BGR(color) ( (((color) & 0xFF) << 16) | ((color) & 0xFF00FF00) | (((color) & 0xFF0000) >> 16) )
54
55
56 class IMAGE;
57
58 // 定义线的样式
59 class LINESTYLE
60 {
61 public:
62 LINESTYLE();
63 LINESTYLE(const LINESTYLE &style);
64 LINESTYLE& operator = (const LINESTYLE &style); // 赋值运算符重载函数
65 virtual ~LINESTYLE();
66
67 DWORD style;
68 DWORD thickness;
69 DWORD *puserstyle;
70 DWORD userstylecount;
71 };
72
73 class FILLSTYLE
74 {
75 public:
76 FILLSTYLE();
77 FILLSTYLE(const FILLSTYLE &style);
78 FILLSTYLE& operator = (const FILLSTYLE &style); // 赋值运算符重载函数
79 virtual ~FILLSTYLE();
80
81 int style; // 填充形式
82 long hatch; // 填充图案样式
83 IMAGE* ppattern; // 填充图像
84 };
85
86 // 定义图像对象
87 class IMAGE
88 {
89 public:
90 int getwidth() const; // 获取对象的宽度
91 int getheight() const; // 获取对象的高度
92
93 private:
94 int width, height; // 对象的宽高
95 HBITMAP m_hBmp;
96 HDC m_hMemDC;
97 int m_MemCurX; // 当前点X坐标
98 int m_MemCurY; // 当前点Y坐标
99 float m_data[6];
100 COLORREF m_LineColor; // 当前线条颜色
101 COLORREF m_FillColor; // 当前填充颜色
102 COLORREF m_TextColor; // 当前文字颜色
103 COLORREF m_BkColor; // 当前背景颜色
104 DWORD* m_pBuffer; // 绘图区的内存
105
106 LINESTYLE m_LineStyle; // 画线样式
107 FILLSTYLE m_FillStyle; // 填充样式
108
109 virtual void SetDefault(); // 设置为默认状态
110
111 public:
112 IMAGE(int _width = 0, int _height = 0); // 创建图像
113 IMAGE(const IMAGE &img); // 拷贝构造函数
114 IMAGE& operator = (const IMAGE &img); // 赋值运算符重载函数
115 virtual ~IMAGE();
116 virtual void Resize(int _width, int _height); // 调整尺寸
117 };
118
119
120
121 // 绘图模式相关函数
122
123 HWND initgraph(int width, int height, int flag = NULL); // 初始化图形环境
124 void closegraph(); // 关闭图形环境
125
126 // 绘图环境设置
127
128 void cleardevice(); // 清屏
129 void setcliprgn(HRGN hrgn); // 设置当前绘图设备的裁剪区
130 void clearcliprgn(); // 清除裁剪区的屏幕内容
131
132 void getlinestyle(LINESTYLE* pstyle); // 获取当前画线样式
133 void setlinestyle(const LINESTYLE* pstyle); // 设置当前画线样式
134 void setlinestyle(int style, int thickness = 1, const DWORD *puserstyle = NULL, DWORD userstylecount = 0); // 设置当前画线样式
135 void getfillstyle(FILLSTYLE* pstyle); // 获取当前填充样式
136 void setfillstyle(const FILLSTYLE* pstyle); // 设置当前填充样式
137 void setfillstyle(int style, long hatch = NULL, IMAGE* ppattern = NULL); // 设置当前填充样式
138 void setfillstyle(BYTE* ppattern8x8); // 设置当前填充样式
139
140 void setorigin(int x, int y); // 设置坐标原点
141 void getaspectratio(float *pxasp, float *pyasp); // 获取当前缩放因子
142 void setaspectratio(float xasp, float yasp); // 设置当前缩放因子
143
144 int getrop2(); // 获取前景的二元光栅操作模式
145 void setrop2(int mode); // 设置前景的二元光栅操作模式
146 int getpolyfillmode(); // 获取多边形填充模式
147 void setpolyfillmode(int mode); // 设置多边形填充模式
148
149 void graphdefaults(); // 重置所有绘图设置为默认值
150
151 COLORREF getlinecolor(); // 获取当前线条颜色
152 void setlinecolor(COLORREF color); // 设置当前线条颜色
153 COLORREF gettextcolor(); // 获取当前文字颜色
154 void settextcolor(COLORREF color); // 设置当前文字颜色
155 COLORREF getfillcolor(); // 获取当前填充颜色
156 void setfillcolor(COLORREF color); // 设置当前填充颜色
157 COLORREF getbkcolor(); // 获取当前绘图背景色
158 void setbkcolor(COLORREF color); // 设置当前绘图背景色
159 int getbkmode(); // 获取背景混合模式
160 void setbkmode(int mode); // 设置背景混合模式
161
162 // 颜色模型转换函数
163 COLORREF RGBtoGRAY(COLORREF rgb);
164 void RGBtoHSL(COLORREF rgb, float *H, float *S, float *L);
165 void RGBtoHSV(COLORREF rgb, float *H, float *S, float *V);
166 COLORREF HSLtoRGB(float H, float S, float L);
167 COLORREF HSVtoRGB(float H, float S, float V);
168
169
170 // 绘图函数
171
172 COLORREF getpixel(int x, int y); // 获取点的颜色
173 void putpixel(int x, int y, COLORREF color); // 画点
174
175 void moveto(int x, int y); // 移动当前点(绝对坐标)
176 void moverel(int dx, int dy); // 移动当前点(相对坐标)
177
178 void line(int x1, int y1, int x2, int y2); // 画线
179 void linerel(int dx, int dy); // 画线(至相对坐标)
180 void lineto(int x, int y); // 画线(至绝对坐标)
181
182 void rectangle (int left, int top, int right, int bottom); // 画矩形
183 void fillrectangle (int left, int top, int right, int bottom); // 画填充矩形(有边框)
184 void solidrectangle(int left, int top, int right, int bottom); // 画填充矩形(无边框)
185 void clearrectangle(int left, int top, int right, int bottom); // 清空矩形区域
186
187 void circle (int x, int y, int radius); // 画圆
188 void fillcircle (int x, int y, int radius); // 画填充圆(有边框)
189 void solidcircle(int x, int y, int radius); // 画填充圆(无边框)
190 void clearcircle(int x, int y, int radius); // 清空圆形区域
191
192 void ellipse (int left, int top, int right, int bottom); // 画椭圆
193 void fillellipse (int left, int top, int right, int bottom); // 画填充椭圆(有边框)
194 void solidellipse(int left, int top, int right, int bottom); // 画填充椭圆(无边框)
195 void clearellipse(int left, int top, int right, int bottom); // 清空椭圆形区域
196
197 void roundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // 画圆角矩形
198 void fillroundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // 画填充圆角矩形(有边框)
199 void solidroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // 画填充圆角矩形(无边框)
200 void clearroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // 清空圆角矩形区域
201
202 void arc (int left, int top, int right, int bottom, double stangle, double endangle); // 画椭圆弧(起始角度和终止角度为弧度制)
203 void pie (int left, int top, int right, int bottom, double stangle, double endangle); // 画椭圆扇形(起始角度和终止角度为弧度制)
204 void fillpie (int left, int top, int right, int bottom, double stangle, double endangle); // 画填充椭圆扇形(有边框)
205 void solidpie(int left, int top, int right, int bottom, double stangle, double endangle); // 画填充椭圆扇形(无边框)
206 void clearpie(int left, int top, int right, int bottom, double stangle, double endangle); // 清空椭圆扇形区域
207
208 void polyline (const POINT *points, int num); // 画多条连续的线
209 void polygon (const POINT *points, int num); // 画多边形
210 void fillpolygon (const POINT *points, int num); // 画填充的多边形(有边框)
211 void solidpolygon(const POINT *points, int num); // 画填充的多边形(无边框)
212 void clearpolygon(const POINT *points, int num); // 清空多边形区域
213
214 void polybezier(const POINT *points, int num); // 画贝塞尔曲线
215 void floodfill(int x, int y, COLORREF color, int filltype = FLOODFILLBORDER); // 填充区域
216
217
218
219 // 文字相关函数
220
221 void outtext(LPCTSTR str); // 在当前位置输出字符串
222 void outtext(TCHAR c); // 在当前位置输出字符
223 void outtextxy(int x, int y, LPCTSTR str); // 在指定位置输出字符串
224 void outtextxy(int x, int y, TCHAR c); // 在指定位置输出字符
225 int textwidth(LPCTSTR str); // 获取字符串占用的像素宽
226 int textwidth(TCHAR c); // 获取字符占用的像素宽
227 int textheight(LPCTSTR str); // 获取字符串占用的像素高
228 int textheight(TCHAR c); // 获取字符占用的像素高
229 int drawtext(LPCTSTR str, RECT* pRect, UINT uFormat); // 在指定区域内以指定格式输出字符串
230 int drawtext(TCHAR c, RECT* pRect, UINT uFormat); // 在指定区域内以指定格式输出字符
231
232 // 设置当前字体样式(详见帮助)
233 // nHeight: 字符的平均高度;
234 // nWidth: 字符的平均宽度(0 表示自适应);
235 // lpszFace: 字体名称;
236 // nEscapement: 字符串的书写角度(单位 0.1 度);
237 // nOrientation: 每个字符的书写角度(单位 0.1 度);
238 // nWeight: 字符的笔画粗细(0 表示默认粗细);
239 // bItalic: 是否斜体;
240 // bUnderline: 是否下划线;
241 // bStrikeOut: 是否删除线;
242 // fbCharSet: 指定字符集;
243 // fbOutPrecision: 指定文字的输出精度;
244 // fbClipPrecision: 指定文字的剪辑精度;
245 // fbQuality: 指定文字的输出质量;
246 // fbPitchAndFamily: 指定以常规方式描述字体的字体系列。
247 void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace);
248 void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut);
249 void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut, BYTE fbCharSet, BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily);
250 void settextstyle(const LOGFONT *font); // 设置当前字体样式
251 void gettextstyle(LOGFONT *font); // 获取当前字体样式
252
253
254
255 // 图像处理函数
256 void loadimage(IMAGE *pDstImg, LPCTSTR pImgFile, int nWidth = 0, int nHeight = 0, bool bResize = false); // 从图片文件获取图像(bmp/gif/jpg/png/tif/emf/wmf/ico)
257 void loadimage(IMAGE *pDstImg, LPCTSTR pResType, LPCTSTR pResName, int nWidth = 0, int nHeight = 0, bool bResize = false); // 从资源文件获取图像(bmp/gif/jpg/png/tif/emf/wmf/ico)
258 void saveimage(LPCTSTR pImgFile, IMAGE* pImg = NULL); // 保存图像(bmp/gif/jpg/png/tif)
259 void getimage(IMAGE *pDstImg, int srcX, int srcY, int srcWidth, int srcHeight); // 从当前绘图设备获取图像
260 void putimage(int dstX, int dstY, const IMAGE *pSrcImg, DWORD dwRop = SRCCOPY); // 绘制图像到屏幕
261 void putimage(int dstX, int dstY, int dstWidth, int dstHeight, const IMAGE *pSrcImg, int srcX, int srcY, DWORD dwRop = SRCCOPY); // 绘制图像到屏幕(指定宽高)
262 void rotateimage(IMAGE *dstimg, IMAGE *srcimg, double radian, COLORREF bkcolor = BLACK, bool autosize = false, bool highquality = true);// 旋转图像
263 void Resize(IMAGE* pImg, int width, int height); // 调整绘图设备的大小
264 DWORD* GetImageBuffer(IMAGE* pImg = NULL); // 获取绘图设备的显存指针
265 IMAGE* GetWorkingImage(); // 获取当前绘图设备
266 void SetWorkingImage(IMAGE* pImg = NULL); // 设置当前绘图设备
267 HDC GetImageHDC(IMAGE* pImg = NULL); // 获取绘图设备句柄(HDC)
268
269
270 // 其它函数
271
272 int getwidth(); // 获取绘图区宽度
273 int getheight(); // 获取绘图区高度
274 int getx(); // 获取当前 x 坐标
275 int gety(); // 获取当前 y 坐标
276
277 void BeginBatchDraw(); // 开始批量绘制
278 void FlushBatchDraw(); // 执行未完成的绘制任务
279 void FlushBatchDraw(int left, int top, int right, int bottom); // 执行指定区域内未完成的绘制任务
280 void EndBatchDraw(); // 结束批量绘制,并执行未完成的绘制任务
281 void EndBatchDraw(int left, int top, int right, int bottom); // 结束批量绘制,并执行指定区域内未完成的绘制任务
282
283 HWND GetHWnd(); // 获取绘图窗口句柄(HWND)
284 TCHAR* GetEasyXVer(); // 获取 EasyX 当前版本
285
286 // 获取用户输入
287 bool InputBox(LPTSTR pString, int nMaxCount, LPCTSTR pPrompt = NULL, LPCTSTR pTitle = NULL, LPCTSTR pDefault = NULL, int width = 0, int height = 0, bool bOnlyOK = true);
288
289 // 鼠标消息
290 // 支持如下消息:
291 // WM_MOUSEMOVE 鼠标移动
292 // WM_MOUSEWHEEL 鼠标滚轮拨动
293 // WM_LBUTTONDOWN 左键按下
294 // WM_LBUTTONUP 左键弹起
295 // WM_LBUTTONDBLCLK 左键双击
296 // WM_MBUTTONDOWN 中键按下
297 // WM_MBUTTONUP 中键弹起
298 // WM_MBUTTONDBLCLK 中键双击
299 // WM_RBUTTONDOWN 右键按下
300 // WM_RBUTTONUP 右键弹起
301 // WM_RBUTTONDBLCLK 右键双击
302
303 struct MOUSEMSG
304 {
305 UINT uMsg; // 当前鼠标消息
306 bool mkCtrl; // Ctrl 键是否按下
307 bool mkShift; // Shift 键是否按下
308 bool mkLButton; // 鼠标左键是否按下
309 bool mkMButton; // 鼠标中键是否按下
310 bool mkRButton; // 鼠标右键是否按下
311 short x; // 当前鼠标 x 坐标
312 short y; // 当前鼠标 y 坐标
313 short wheel; // 鼠标滚轮滚动值 (120 的倍数)
314 };
315
316 bool MouseHit(); // 检查是否存在鼠标消息
317 MOUSEMSG GetMouseMsg(); // 获取一个鼠标消息。如果没有,就等待
318 void FlushMouseMsgBuffer(); // 清空鼠标消息缓冲区
========================================================================================================================
EasyX 简易绘图工具接口整理的更多相关文章
- Opencv实现的简易绘图工具
第一次写博,还是个菜鸟.最近开始学习Opencv,试着写了个简易的绘图工具(目前只写了画线和橡皮擦部分,画其它图形还有待往里添加),也算是记录自己的学习之路. #include "stdaf ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...
- Python绘图工具Plotly的简单使用
1.Plotly被称为史上最好的绘图工具之一,为了更好的展示金融数据的复杂性. Plotly的官方网站为:https://plot.ly/ python量化的关键是金融数据可视化,无论是传统的K线图, ...
- 对RedisTemplate接口二次封装成自定义工具接口
开发过程中,经常使用redis数据库存储. 一般都是依赖注入redisTemplate,然后调用redisTemplate的api进行接口功能实现. 但是,如果对redisTemplate自带的API ...
- UML系列01之 UML和绘图工具Visio介绍
概要 UML,全称是Unified Modeling Language,中文是"统一建模语言".通俗点说,UML是一种创建模型的语言.UML是在开发阶段,说明,可视化,构建和书写一 ...
- 用MSoffice里的绘图工具
试过一些绘图表的工具,在xbeta推荐的替代visio一文中介绍的一些软件.之前用得最多的就是Dia,在linux下也有.现在才发现在微软的office下的绘图工具已经足够我使用了,不需要专业的图形符 ...
- 一起来画画!8款最佳HTML5绘图工具
HTML5无疑是当前最受宠的一项技术,今天推荐8款HTML5绘图工具,同样惊艳你的眼球!这些绘图工具大多数是用HTML5画布(Canvas)实现的,部分辅以Javascript.对每一个web设计者来 ...
- HTML5 canvas 在线画笔绘图工具(一)
HTML5 canvas 在线画笔绘图工具(一) 功能介绍 这是我用Javascript写的第一个程序,在写的过程中走了很多弯路,所以写完之后想分享出来,给与我一样的初学者做为学习的参考,同时在编写这 ...
- 绘图工具graphviz学习使用
画图工具: http://www.tuicool.com/articles/r2iAfa http://www.tuicool.com/articles/RjQfey 绘图工具graphviz学习使用 ...
随机推荐
- mysql学习笔记1(mysql的基本架构)
mysql基本架构图 如图所示: 1 . MySQL 可以分为 Server 层和存储引擎层两部分 Server 层包括连接器.查询缓存.分析器.优化器.执行器等,涵盖 MySQL 的大多数核心服务功 ...
- c# 调用Go 动态库
[StructLayout(LayoutKind.Sequential)] public struct GoMem { public IntPtr data; public UInt64 len; p ...
- 新鲜出炉!面试90%会被问到的Java多线程面试题,史上最全系列!
前言 最近很多粉丝朋友私聊我说能不能给整理出一份多线程面试题出来,说自己在最近的面试中老是被问到这一块的问题被问的很烦躁,前一段时间比较忙没时间回私信,前两天看到私信我也是赶紧花了两天给大家整理出这一 ...
- On Starting My Blogging On CNBlogs
About Myself I am a would-be Master of Engineering, on the last year of my student life, I'm ambitou ...
- 使用Folx下载热门电影居然这么简单
在闲暇的时候,很多人会选择观看电影.电视剧来打发时间.对于一些热门的资源,可以通过网页搜索的方式,找到很多与之相对应的种子资源. 但有时候,一些不那么热门的资源就要花费较多时间搜索.有了Folx bt ...
- 听法国设计师大卫·维森特讲述他与CorelDRAW的渊源
在这次采访中,我们采访了法国插画家兼平面设计师大卫·维森特(David Vicente),他的特殊风格与Old-School美学,尤其是疯狂摇滚派有着密切的联系.在他精心制作的插图中,充满了细节和强烈 ...
- Tuxera Disk Manager轻松解决硬盘格式转换问题
生活中经常会遇到硬盘格式转换的问题,很多小伙伴都不知道怎么进行操作,特别是Mac小白们.今天,小编想要给不熟悉Mac系统的小伙伴推荐一款专业且高效的磁盘管理工具--Tuxera NTFS,可以帮助我们 ...
- MySQL优化篇(未完待续)
一.优化SQL语句的一般步骤 1.通过 show status命令了解各种sql的执行频率 mysql客户端连接成功后,通过show[session|global] status命令,可以查看服务器的 ...
- php进阶学习-单例设计模式
什么是单例模式(singleton)? 在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点. 单例模式的特点 一个类只有一个实例 私有克隆 ...
- 体育成绩统计/ Score
偏水向,请部分学术控谅解 题目过长,不再描述. 很显然就是一道大模拟对吧,我在这里贡献一下我打此题的思路与过程. 或许有些奇淫巧技可以供一些没有过掉的神犇借鉴一下. 2020.11.26 中午: 昨天 ...