赞
踩
我们在之前的学习中一直使用的是编译器携带的控制台,也就是常说的黑窗练习,长期的黑窗口练习会感觉很枯燥。这里我们就引入了一个具有可视化功能的简单的图形库——Easyx。
EasyX 是针对 C/C++ 的图形库,可以帮助使用C/C++语言的程序员快速上手图形和游戏编程。
比如,可以用 VC + EasyX 很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等。
基于Windows图形编程,将Windows下的复杂程序过程进行封装,将Windows下的编程过程隐藏,给用户提供一个简单熟悉的接口。用户对于图形库中函数的调用,最终都会由Windows的底层API实现。
Easyx安装地址
安装流程
在安装完成之后打开安装的Easyx.exe文件,就会弹出以上窗口,然后我们可以有三个安装选择按钮,在我的电脑上有 vc++ 6.0 和 vs 2019 ,我们可以根据自己的编译器使用习惯选择对应的编译器安装。
在安装好之后,easyx的底层代码就会安装到我们对应的编译器下,我们只需要在使用的时候引入头文件#include<graphics.h>即可
我们可以打开windows自带的画图板
可以在右侧看到,所有的颜色都是由三原色实现一个组合得到的
比如我们调到正红色和正黑色
这和我们初中学习到的光学知识的原理是一样的
所以当我们想生成一个16进制的颜色的时候
可以使用
RGB(x,y,z);
通过不同的组合就和得到不同的颜色
坐标默认的原点在窗口的左上角,X轴向右为正,Y 轴向下为正,度量单位是像素点。
设备:简单来说,就是绘图表面。
在EasyX中,设备分两种,一种是默认的绘图窗口另一种是IMAGE对象。通过SetWorkinglmage()函数可以设置当前用于绘图的设备。设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。
Easyx与我们常识中的坐标系有所不同,在y轴方向是向下为正
- #include <graphics.h>
- #include <stdio.h>
- int main() {
- initgraph(800, 600, NOCLOSE); //画窗口
-
- system("pause"); //暂停 getch getchar
- closegraph(); //关闭窗口操作
- return 0;
- }
这样就画出了一个不带控制台的绘画窗口
值 | 含义 |
DBLCLKS | 在绘图窗口中支持鼠标双击事件。 |
SHOWCONSOLE | 显示控制台窗口。 |
NOCLOSE | 禁用绘图窗口的关闭按钮。 |
NOMINIMIZE | 禁用绘图窗口的最小化按钮。 |
initgraph(800, 600,SHOWCONSOLE);
一个带控制台的800*600的绘图窗口
system("pause");
暂停操作
cleardevice();
这个函数使用当前背景色清空绘图设备。
closegraph();
关闭操作窗口
函数名称 | 介绍 |
setbkcolor | 设置当前设备绘图背景色。 |
setbkmode | 设置当前设备图案填充和文字输出时的背景模式。 |
setfillcolor | 设置当前设备填充颜色。 |
setfillstyle | 设置当前设备填充样式。 |
setlinecolor | 设置当前设备画线颜色。 |
setlinestyle | 设置当前设备画线样式。 |
在使用setbkcolor后,要使用clesrdevice清除原来的颜色
在使用setfillstyle时
BS_SOLID | 0 | 固实填充。 |
BS_NULL | 1 | 不填充。 |
BS_HATCHED | 2 | 图案填充。 |
BS_PATTERN | 3 | 自定义图案填充。 |
BS_DIBPATTERN | 5 | 自定义图像填充。 |
指定填充图案,仅当 style 为 BS_HATCHED 时有效。填充图案的颜色由函数 setfillcolor 设置,背景区域使用背景色还是保持透明由函数 setbkmode 设置。hatch 参数可以是以下宏或值:
HS_HORIZONTAL | 0 | |
HS_VERTICAL | 1 | |
HS_FDIAGONAL | 2 | |
HS_BDIAGONAL | 3 | |
HS_CROSS | 4 | |
HS_DIAGCROSS | 5 |
参数 style 指定了画线样式,该样式由直线样式、端点样式、连接样式三类组成。可以是其中一类或多类的组合。同一类型中只能指定一个样式。
直线样式可以是以下值:
PS_SOLID 线形为实线。
PS_DASH 线形为:------------
PS_DOT 线形为:············
PS_DASHDOT 线形为:-·-·-·-·-·-·
PS_DASHDOTDOT 线形为:-··-··-··-··
PS_NULL 线形为不可见。
PS_USERSTYLE 线形样式为用户自定义,由参数 puserstyle 和 userstylecount 指定。
MouseHit()
这个函数的作用是监听鼠标是否具有点击动作
GetMouseMsg();
这个函数可以获取鼠标点击的信息
圆形
- int main() {
- initgraph(800, 600); //画窗口
- //圆圈填充色 换黄色,圆圈边框 红色
-
-
-
- 画圆
- setfillcolor(YELLOW);
- setlinecolor(RED);
- setlinestyle(PS_SOLID,5); //圆圈边框线条 设置为实线,宽度5像素
- fillcircle(50,50,50);
-
- system("pause"); //暂停 getch getchar
- closegraph(); //关闭窗口操作
- return 0;
- }
矩形
fillrectangle(100, 100,400, 200); //画长方形
长为 400 -100
宽为 200-100
因此我们就可以设计一个登陆按钮的可视化实现,当只有点击到登陆按钮内部时,在控制台输出点击的显示 以及点击的按键
这里我们就要设计让字体居中 ,以及鼠标捕捉
- int re[] = { 100, 100, 400, 200 }; //矩形坐标,x1,y1,x2,y2
- int main() {
- initgraph(800, 600,SHOWCONSOLE); //画窗口
- //文字设定
- settextcolor(BLACK); // 设定文字颜色 黑(默认)
- settextstyle(60, 50, "黑体"); //文字宽度 文字高度, 自适应大小:0,0
- //登录 -> 矩形框 -> 居中处理
-
- setbkcolor(WHITE);
- cleardevice();
- setlinecolor(BLACK);
- setlinestyle(PS_SOLID, 3);
- fillrectangle(re[0],re[1],re[2],re[3]);
- RECT rect = { re[0],re[1],re[2],re[3] };
- drawtext("登录", &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
- //水平居中 垂直居中 单行显示
- /鼠标监听/
- MOUSEMSG msg;
-
- while (1) {
- if (MouseHit()) { //监听是否有鼠标点击动作
- msg = GetMouseMsg(); //获取当前鼠标点击信息(umsg,x,y)
- if (msg.x >= re[0] && msg.x <=re[2] && msg.y >= re[1] && msg.y <= re[3]) {
- switch (msg.uMsg)
- {
- case WM_LBUTTONDOWN:
- printf("点击左键啦 x=%d,y=%d\n", msg.x, msg.y);
- break;
- case WM_RBUTTONDOWN:
- printf("点击右键啦 x=%d,y=%d\n", msg.x, msg.y);
- break;
- default:
- break;
- }
- }
- }
- }
-
- system("pause"); //暂停 getch getchar
- closegraph(); //关闭窗口操作
- return 0;
- }
这个程序就可以实现在登录界面点击登陆键外部区域无反应,点击登陆界面内部显示点击部位的像素以及点击了左键还是右键
文章参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。