文章目录
话不多说,来看一下我们都要了解什么吧!

官网:请点击我进入
注意:EasyX 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022
下载:
安装后:
注意:安装的会自动识别你已经安装的版本,点击安装即可,EasyX文档可以下也可以不下(区别是离线和在线),安装时最好退出你的vs。
安装好后我们就可以创建一个新项目了。
注意:设置的源文件为后缀.cpp
头文件:#include<graphics.h>
创建窗口函数:initgraph();
参数:
1.宽度
2.高度
关闭窗口函数:closegraph();
参数:无
注意:这里是函数执行后会立马关闭窗口,因此需要有个缓冲函数:getchar()让窗口得以持续显示。
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>//getchar的头文件
int main()
{
initgraph(520, 520);//宽520,高520.
getchar();
closegraph();
return 0;
}
效果

这时我们就创建好一个窗口了!不过现在有点单调,需要再添加一些元素,慢慢来。
我们应该都学过建立平面直角坐标系,那这里的坐标系是如何建立的呢?
看下图:

注意:请记住这里的坐标原点在窗口名字的正下方。
看着这一团黑色,不利于画图这里就要借助于设置背景的函数。
函数:setbkcolor();
参数:颜色
这里白色适合画图我们就用白色吧!但是上次默认的黑色还在我们要清除一下,要用到一个函数。
函数:cleardevice();
参数:无
功能:使用当前背景色清空绘图设备
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
getchar();
closegraph();
return 0;
}
效果:

这白不白?
函数:circle();
参数:
1.圆心的横坐标
2.圆心的纵坐标
3.圆的半径
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
//画一个圆
circle(50, 50, 50);
getchar();
closegraph();
return 0;
}
效果:

这是为啥?难道是因为颜色相同覆盖了?
我们论证一下:
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(BLACK);//设置背景为黑色
cleardevice();
//画一个圆
circle(50, 50, 50);
getchar();
closegraph();
return 0;
}
效果:

还真是,那如果我们要在白色背景下,画一个圆该咋办呢?
这就用到设置线条的函数了。
函数:setfillcolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
setlinecolor(BLACK);
//画一个圆
circle(50, 50, 50);
getchar();
closegraph();
return 0;
}
效果:

函数:fillcircle();
参数:
1.圆心的横坐标
2.圆心的纵坐标
3.圆的半径
写一下代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
setlinecolor(BLACK);
//画一个圆
circle(50, 50, 50);
fillcircle(50, 150, 50);//有边框
getchar();
closegraph();
return 0;
}
效果:

这里因为圆的背景色是白色,所以看起来没有填充,so我们来设计一下。
函数:setfillcolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
setlinecolor(BLACK);
setfillcolor(BLUE);
//画一个圆
circle(50, 50, 50);
fillcircle(50, 150, 50);//有边框
getchar();
closegraph();
return 0;
}
效果:

函数:solidcircle();
参数:
1.圆心的横坐标
2.圆心的纵坐标
3.圆的半径
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);//设置一个窗口
setbkcolor(WHITE);//设置背景色
cleardevice();//用背景色覆盖窗口
setlinecolor(BLACK);//设置图形线条颜色
setfillcolor(BLUE);//设置图形填充颜色
//画一个圆
circle(50, 50, 50);
fillcircle(50, 150, 50);//有边框
solidcircle(50, 250, 50);//无边框
getchar();//缓冲
closegraph();//关闭窗口
return 0;
}
效果:



准备完成!这里是为了更好的使用打印文字的函数。
函数:outtextxy();
参数:
1.文字的横坐标
2.文字的纵坐标
3.文字的内容
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");
getchar();
closegraph();
return 0;
}
效果:

还是刚才那个问题,文字的颜色默认为白色,因此我们需设置字体颜色。
函数:settextcolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
settextcolor(RED);//文字格式为红色
outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");
getchar();
closegraph();
return 0;
}
效果:

函数:settextstyle()
参数:
1.字符的大小
2.字符的字宽,如果为0则自动匹配
3.字符的形式,比如楷体,宋体
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
settextcolor(RED);//文字格式为红色
settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式
outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");
getchar();
closegraph();
return 0;
}
效果:

这样是不是好看多了?
函数:setcolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
settextcolor(RED);//文字格式为红色
settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式
setcolor(GREEN);
//setcolor(RGB(70, 127, 50));
outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");
getchar();
closegraph();
return 0;
}
效果:

注意:RGB()里面的三个参数为色素点。

因为字体的背景默认为白色会掩盖其他物体,所以我们为了不掩盖,可以改变字体的背景为透明色。
函数:setbkmode()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
settextcolor(RED);//文字格式为红色
settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式
setcolor(GREEN);
setbkmode(TRANSPARENT);
outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");
getchar();
closegraph();
return 0;
}
效果:
前:
后:

我们需要一个长方形,以便更好地显示。
函数:fillrectangle()
参数:
1.矩形左部 x 坐标
2.矩形顶部 y 坐标
3.矩形右部 x 坐标
4.矩形底部 y 坐标
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
settextcolor(RED);//文字格式为红色
settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式
setcolor(GREEN);
setbkmode(TRANSPARENT);
fillrectangle(100, 100, 500, 500);
outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");
getchar();
closegraph();
return 0;
}
效果:

居中显示的原理:

cdceaa85.png)
注意:这里矩形的高为底部y坐标减去顶部y坐标,矩形的宽为右边x坐标减去左边x坐标。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
settextcolor(RED);//文字格式为红色
settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式
setcolor(GREEN);
setbkmode(TRANSPARENT);
fillrectangle(100, 100, 500, 500);
//求字体的宽度与高度
char arr[] = "谢谢观众老爷,赏脸看shun_hua的博客";
int width = textwidth(arr);
int height = textheight(arr);
//求所加坐标的值
//所加x坐标的值
int x = (500 - 100) / 2 - width / 2;
//所加y坐标的值
int y = (500 - 100) / 2 - height / 2;
outtextxy(100+x, 100+y, "谢谢观众老爷,赏脸看shun_hua的博客");
getchar();
closegraph();
return 0;
}
效果:

函数:_kbhit()——布尔类型
头文件:conio.h
参数:无
函数:_getch()
头文件:conio.h
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
int main()
{
initgraph(520, 520,SHOWCONSOLE);//这里的第三个参数为显示控制台窗口
setbkcolor(WHITE);
int x = 200, y = 300;
while (1)
{
cleardevice();
setfillcolor(RED);
solidcircle(x, y, 50);
if (_kbhit())
{
char key = _getch();
printf("%d %c\n", key, key);//可以获取键的ASCII值
switch (key)
{
case 72://上键的ASCII值
y -= 5;
break;
case 80://下键的ASCII值
y += 5;
break;
case 75://左键的ASCII值
x -= 5;
break;
case 77://右键的ASCII值
x += 5;
break;
}
}
}
getchar();
closegraph();
return 0;
}
效果:

缺点:会出现闪屏的现象,并且由于switch的性质,无法斜着进行移动。
解决方法;
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
int main()
{
initgraph(520, 520,SHOWCONSOLE);
setbkcolor(WHITE);
int x = 200, y = 300;
BeginBatchDraw();//这个函数用于开始批量绘图。执行后,任何绘图操作都将暂时不输出
//到绘图窗口上,直到执行 FlushBatchDraw 或 EndBatchDraw 才将之前的绘图输出。
void BeginBatchDraw();
while (1)
{
cleardevice();
setfillcolor(RED);
solidcircle(x, y, 50);
FlushBatchDraw();//这个函数用于执行未完成的绘制任务。比EndBatchDraw更稳定
//四个if为四个接口,可以斜向上移动,并且更加丝滑。
if (GetAsyncKeyState(VK_UP))
{
y--;
}
if (GetAsyncKeyState(VK_DOWN))
{
y++;
}
if (GetAsyncKeyState(VK_LEFT))
{
x--;
}
if (GetAsyncKeyState(VK_RIGHT))
{
x++;
}
}
getchar();
closegraph();
return 0;
}
效果:

函数:MouseHit()——布尔类型
参数:无参
鼠标信息的类型:MOUSEMSG
定义变量(举例):MOUSEMSG msg;
读取鼠标信息的函数:GetMouseMsg()
msg.uMsg将变量进行处理转变为常变量(猜测)
WM_LBUTTONDOWN——鼠标左键
WM_RBUTTONDOWN——鼠标右键
msg.x获取鼠标的横坐标
msg.y获取鼠标的纵坐标
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
int main()
{
initgraph(520, 520,SHOWCONSOLE);
setbkcolor(BLACK);
cleardevice();
while (1)
{
if (MouseHit())
{
MOUSEMSG msg = GetMouseMsg();
switch (msg.uMsg)
{
case WM_LBUTTONDOWN:
outtextxy(200, 200, "鼠标左键");
printf("坐标(%d,%d)", msg.x, msg.y);
break;
case WM_RBUTTONDOWN:
outtextxy(100, 100, "鼠标右键");
printf("坐标(%d,%d)", msg.x, msg.y);
break;
}
}
}
getchar();
closegraph();
return 0;
}
效果:

图片类型:IMAGE
定义:IMAGE mage;
函数:loadimage()
参数:
1.图片地址
2.图片文件夹——./为当前文件目录。
函数:putimage()
参数:
1.图片的横坐标
2.图片的纵坐标
3.图片地址
代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
int main()
{
initgraph(2000, 2000,SHOWCONSOLE);
setbkcolor(WHITE);
cleardevice();
IMAGE mage;
loadimage(&mage, "2.jpg");
putimage(0, 0, &mage);
getchar();
closegraph();
return 0;
}
注意:要看一下自己图片与窗口的大小,以达到自己预期的效果。
效果:

函数:mciSendString()
头文件:mmsystem.h
预处理指令:#pragma comment(lib,“winmm.lib”)
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<mmsystem.h>//包含多媒体接口
#pragma comment(lib,"winmm.lib")//处理接口
void BGM()
{
//文件为.mp3为后缀才可播放,要把音乐拷贝到项目所在文件夹里
mciSendString("open ./ww.mp3", 0, 0, 0);//0,0,0为默认输出控制台
mciSendString("play ./ww.mp3", 0, 0, 0);
if (0)
{
mciSendString("close ./ww.mp3",0, 0, 0);
}
}
int main()
{
initgraph(500, 500,SHOWCONSOLE);
setbkcolor(WHITE);
cleardevice();
BGM();
getchar();
closegraph();
return 0;
}
效果是一段音乐。
窗口类型:HWND
窗口定义:HWND hand;
函数:GetHWnd()
功能:获取窗口信息
函数:SetWindowTex
功能:设置窗口内容
参数:1.类型变量名 2.修改内容
函数:MessageBox
功能:设置窗口内容
参数:1.类型变量名 2.修改内容
代码:
#include<conio.h>
#include<mmsystem.h>//包含多媒体接口
#pragma comment(lib,"winmm.lib")
void BGM()
{
mciSendString("open ./ww.mp3", 0, 0, 0);//默认输出控制台
mciSendString("play ./ww.mp3", 0, 0, 0);
if (0)
{
mciSendString("close ./ww.mp3",0, 0, 0);
}
}
void change()
{
HWND hand = GetHWnd();
SetWindowText(hand, "欢迎来到我的博客");
int i = MessageBox(hand, "请留下你的三连", "提示",MB_OKCANCEL);
if (IDOK == i)
{
printf("谢谢大佬!");
}
else if (IDCANCEL == i)
{
printf("感谢您的观看!");
}
}
int main()
{
initgraph(500, 500,SHOWCONSOLE);
setbkcolor(WHITE);
cleardevice();
change();
getchar();
closegraph();
return 0;
}
效果:


如果能认真看到这里,我坚信你能收获很多很多!也希望这篇文章能帮助到你,如果觉得不错,请点击一下不要钱的赞,如果有误请温柔的指出,在这里感谢大家了!
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
两个gsub产生不同的结果。谁能解释一下为什么?代码也可在https://gist.github.com/franklsf95/6c0f8938f28706b5644d获得.ver=9999str="\tCFBundleDevelopmentRegion\n\ten\n\tCFBundleVersion\n\t0.1.190\n\tAppID\n\t000000000000000"putsstr.gsub/(CFBundleVersion\n\t.*\.).*()/,"#{$1}#{ver}#{$2}"puts'--------'putsstr.gsub/(CFBundleVersio
我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记