基于C/C++的easyx图形库教程

文章目录:

一:前言 

二:窗口(宽高 背景颜色 窗口标题 弹出对话框)

三:图形绘制(点 线 矩形 圆 椭圆)

四:文字(颜色 大小 背景 位置 打印 文字居中)

五:事件消息

1.键盘事件消息(按键交互 按键异步交互 双缓冲贴图)

demo1 

demo2

2.鼠标事件消息

2.1  利用MOUSEMSG的方法

2.2  利用ExMessage的方法 

3.定时器事件消息

六:图片/贴图(原样贴图 透明贴图 精灵图 双缓冲贴图)

七:背景音乐

八:项目

贪吃蛇 


一:前言 

官网:EasyX Graphics Library for C++

参考

官方:EasyX 文档 - 基本说明

51:easyx保姆级教程

第三方:EasyX基础入门、番外篇:入门EasyX图形库

下载

安装easyx环境:EasyX Graphics Library for C++——>右上侧点击下载安装在

安装程序会自动检测您已经安装的 VC 版本,并根据您的选择将对应的 .h 和 .lib 文件安装至 VC 的 include 和 lib 文件夹内

编译器 VS或者VC:编译环境:Visual C++ 6.0,Visual Studio 2008 至 Visual Studio 2022 (x86 & x64)

使用

启动 Visual C++,创建一个空的控制台项目(Win32 Console Application),然后添加一个新的代码文件(.cpp),并引用 graphics.h 头文件

// 引用图形库头文件
#include<easyx.h>        //这个是只包含最新的API(函数接口)
#include<graphics.h>     //这个头文件包含了上面的,还包含了已经不推荐使用的函数	#include <conio.h>int main()	//画圆的例子
{initgraph(640, 480);	// 创建绘图窗口,大小为 640x480 像素circle(200, 200, 100);	// 画圆,圆心(200, 200),半径 100_getch();				// 按任意键继续closegraph();			// 关闭绘图窗口return 0;
}

二:窗口(宽高 背景颜色 窗口标题 弹出对话框)

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件void change()
{//设置图形窗口//窗口定义HWND hand	 函数GetHWnd()获取窗口信息HWND hnd = GetHWnd();//设置窗口标题内容SetWindowTex(类型变量名,修改内容)SetWindowText(hnd,"很高兴认识你");//设置提示窗口:MessageBox(类型变量名,提示内容)int is_ok = MessageBox(hnd,"我是消息框","要不要关闭我",MB_OKCANCEL);if(is_ok == IDOK){printf("你点击了OK\n");}else if(is_ok == IDCANCEL){printf("你点击了cancel\n");}
}int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(520, 520);//宽520,高520//initgraph(520, 520,SHOWCONSOLE);//宽520,高520/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();change();//调用/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

三:图形绘制(点 线 矩形 圆 椭圆)

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(520, 520);//宽520,高520/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();//设置线条的函数setlinecolor(颜色):线条颜色默认为白色setlinecolor(BLACK);//画圆形//画一个圆(圆心的横坐标,圆心的纵坐标,圆的半径)circle(50, 50, 50);//填充背景颜色setfillcolor(颜色):默认为白色setfillcolor(BLUE);//有边框实心圆fillcircle(圆心的横坐标,圆心的纵坐标,圆的半径)fillcircle(50, 150, 50);//有边框//无边框的实心圆solidcircle(圆心的横坐标,圆心的纵坐标,圆的半径)solidcircle(50, 250, 50);//无边框//点:putpixel(x,y,color);putpixel(100,100,BLUE);//线//line(x1,y1,x2,y2); //起始坐标,终止坐标//可以使用getwidth() gethight()获取窗口的宽度和高度line(10,10,80,80);//设置线条颜色setlinecolor()setlinecolor(BLUE);//样式setlinestyle(样式,宽度);/*样式#define	PS SOLID			0#define	PS DASH				1#define	PS DOT				2#define	PS DASHDOT			3#define	PS DASHDOTDOT		4#define	PS NULL				5#define	PS INSIDEFRAME		6#define	PS USERSTYLE		7	#define	PS ALTERNATE		8#define PS STYLE MASK		0x0000000F*/setlinestyle(8,8);//正矩形//左上角坐标,右下角坐标---->无填充矩形rectangle(x1,y1,x2,y2);   rectangle(150,150,250,250); //颜色填充setfillcolor(); setfillcolor(BROWN); //填充矩形//fillrectangle();  //无边框填充矩形solidrectangle(); //solidrectangle();    //圆角矩形//roundrect(x1,y1,x2,y2,宽度,高度);roundrect(200,200,300,300,10,10);//fillroundrect()和solidroundrect()//椭圆ellipse(x1,y1,x2,y2);矩形左上角和右下角坐标,椭圆就是该矩形的内切ellipse(150,150,250,450);//fillellipse()和solidellipse()/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

四:文字(颜色 大小 背景 位置 打印 文字居中)

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(520, 520);//宽520,高520/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();//设置文字颜色settextcolor(颜色):文字的颜色默认为白色settextcolor(RED);//文字格式为红色//设置文字大小settextstyle(高度,宽度 如果为0则自动匹配,字符的形式比如楷体宋体)settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式//设置当前字体的颜色setcolor(颜色)setcolor(GREEN);//设置字体的背景setbkmode(颜色):背景默认为白色会掩盖其他物体setbkmode(TRANSPARENT);		//透明//显示位置:fillrectangle(矩形左部 x 坐标,矩形顶部 y 坐标,矩形右部 x 坐标,矩形底部 y 坐标);//打印文字outtextxy(文字的横坐标,文字的纵坐标,文字的内容)outtextxy(100, 100, "文字在图形的居中显示1");//文字在图形的居中显示//initgraph(520, 520)	fillrectangle(100, 100, 500, 500)//求字体的宽度与高度char arr[] = "文字在图形的居中显示1";int width = textwidth(arr);int height = textheight(arr);//求所加坐标的值//所加x坐标的值int x = (520 - width) / 2;//所加y坐标的值int y = (520 - height) / 2;outtextxy(x, y, "文字在图形的居中显示2");/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

五:事件消息

1.键盘事件消息(按键交互 按键异步交互 双缓冲贴图)

demo1 

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
#include<conio.h>					//键盘int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(520, 520,SHOWCONSOLE);//宽520,高520,这里的第三个参数为显示控制台窗口/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);int x = 200, y = 300;//这个函数用于开始批量绘图:执行后,任何绘图操作都将暂时不输出void BeginBatchDraw();while (1){/*清除系统之前默认的黑色背景*/cleardevice();//填充红色背景setfillcolor(RED);//无边框实心圆solidcircle(x, y, 50);//停止闪烁:这个函数用于执行未完成的绘制任务。比EndBatchDraw更稳定FlushBatchDraw();//第一种 按键交互:键盘响应ascll码值//获取键盘信息_kbhit()			头文件:conio.h/*if (_kbhit()){//输出键盘信息:_getch()		头文件:conio.hchar 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;}}*///第二种 键盘异步交互:方法调用(更加丝滑)if (GetAsyncKeyState(VK_UP)){y--;}if (GetAsyncKeyState(VK_DOWN)){y++;}if (GetAsyncKeyState(VK_LEFT)){x--;}if (GetAsyncKeyState(VK_RIGHT)){x++;}}/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

demo2

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
#include<time.h> 
#include<conio.h>					//阻塞函数getch()不需要回车确认输入//球定义
struct Ball
{int x;int y;int r;//增量int dx;int dy;
};
struct Ball ball={400,400,15,5,-4};
struct Ball myball={500,500,15,5,5};//画球
void DrawBall(struct Ball ball){setfillcolor(RED);solidcircle(ball.x,ball.y,ball.r);
}
//定时器:去控制自动移动东西			#include<time.h> 
//			时间间隔	id
int Timer(int duration,int id){//开始时间static int startTime[10];//结束时间int endTime=clock();			//clock()统计程序运行到当前代码的时间if (endTime-startTime[id]>duration){startTime[id]=endTime;return 1;}return 0;
}
//移动球(自己动)
void MoveBall(){//相撞		左壁			右壁if(ball.x-ball.r<=0||ball.x+ball.r>=800){ball.dx=-ball.dx;	//反射:增量发生变化}//相撞		上壁			下壁if(ball.y-ball.r<=0||ball.y+ball.r>=800){ball.dy=-ball.dy;}ball.x +=ball.dx;ball.y -=ball.dy;
}
//按键交互:移动球(按键控制)会发生阻塞
void KeyDown(){//获取用户按键int userKey=_getch();switch (userKey){case 'w':case 'W':case 72:myball.y -=5;break;case 's':case 'S':case 80:myball.y +=5;break;case 'a':case 'A':case 75:myball.x -=5;break;case 'd':case 'D':case 77:myball.x +=5;break;}
}
//键盘异步交互:不会发生阻塞
void KeyDown2(){if (GetAsyncKeyState(VK_UP)){myball.y -=5;}if (GetAsyncKeyState(VK_DOWN)){myball.y +=5;}if (GetAsyncKeyState(VK_LEFT)){myball.x -=5;}if (GetAsyncKeyState(VK_RIGHT)){myball.x +=5;}
}int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(800, 800);/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();//开始双缓冲贴图:解决一闪一闪的问题BeginBatchDraw();//控制移动while (1){//刷新cleardevice();//先画球DrawBall(ball);DrawBall(myball);if(Timer(20,0))//球自己移动球MoveBall();//鼠标控制球移动//if (_kbhit())	//判断阻塞:判断存在按键再去处理//{//	KeyDown();//}//if(Timer(20,1))//键盘异步交互KeyDown2();//Sleep(20);		//休眠一下	也是阻塞函数//显示每一帧FlushBatchDraw();}//结束双缓冲贴图EndBatchDraw();/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

2.鼠标事件消息

2.1  利用MOUSEMSG的方法

#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//定义变量(举例):MOUSEMSG msg;//读取鼠标信息的函数:GetMouseMsg()MOUSEMSG msg = GetMouseMsg();//消息处理switch (msg.uMsg)								//获取当前鼠标消息{case WM_LBUTTONDOWN:							//鼠标左键outtextxy(200, 200, "鼠标左键");			printf("左键坐标(%d,%d)", msg.x, msg.y);			//msg.x获取鼠标的横坐标	msg.y获取鼠标的纵坐标break;case WM_RBUTTONDOWN:							//鼠标右键outtextxy(100, 100, "鼠标右键");		printf("右键坐标(%d,%d)", msg.x, msg.y);break;case WM_MBUTTONDOWN:							//中键按下printf("中键按下\n");break; case WM_MOUSEWHEEL:								//滚轮滑动printf("%d滚轮滑动\n",msg.wheel);   //获取滚轮滑动方向,正朝屏幕,负朝自己break;case WM_MOUSEMOVE:								//鼠标移动printf("鼠标移动\n");break;}}}getchar();closegraph();return 0;
}/*MOUSEMSG结构体struct MOUSEMSG	{		UINT uMsg;				获取当前鼠标消息bool mkCtrl :l;			Ctrl 键是否按下bool mkShift :l;		Shift 键是否按下bool mkLButton :l;		鼠标左键是否按下bool mkMButton :l;		鼠标中键是否按下bool mkRButton :l;		鼠标右键是否按下short x;				当前鼠标 x 坐标short y;				当前鼠标 坐标short wheel;			鼠标滚轮滚动值 (120 的倍数)}*/

2.2  利用ExMessage的方法 

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件int main()
{initgraph(800, 600,SHOWCONSOLE);//setbkcolor(WHITE);cleardevice();//定义ExMessage类型的变量去存储鼠标消息ExMessage msg;		 	  while (true){//获取鼠标消息peekmessage(&变量)while (peekmessage(&msg)){//讨论鼠标消息switch (msg.message)	//区分鼠标消息的类型:msg.message{//鼠标的当前坐标:msg.x  msg.ycase WM_LBUTTONDOWN:circle(msg.x,msg.y,10);break;case WM_RBUTTONDOWN:rectangle(msg.x-5,msg.y-5,msg.x+5,msg.y+5);break;}}}getchar();closegraph();return 0;
}

3.定时器事件消息

#include<time.h> //定时器:去控制自动移动东西			#include<time.h> 
//			时间间隔	id
int Timer(int duration,int id){//开始时间static int startTime[10];//结束时间int endTime=clock();			//clock()统计程序运行到当前代码的时间if (endTime-startTime[id]>duration){startTime[id]=endTime;return 1;}return 0;
}int main()
{/*创建窗口函数:initgraph(宽度,高度)*//*窗口的左上角是坐标原点,x轴向右增大,y轴向下增大,不包括标题栏*/initgraph(800, 800);/*设置背景颜色:默认为黑色*/setbkcolor(WHITE);/*清除系统之前默认的黑色背景*/cleardevice();//调用if(Timer(20,0))//球自己移动球MoveBall();//这是一个你自己写的方法/*缓冲函数getchar()让窗口得以持续显示*/getchar();/*关闭窗口函数:closegraph()*/closegraph();return 0;
}

六:图片/贴图(原样贴图 透明贴图 精灵图 双缓冲贴图)

图片需要和程序放在一个路径之下 

#define _CRT_SECURE_NO_WARNINGS 1    //用来消除由于函数的安全性导致的的报错
// 引用图形库头文件
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件int main()
{initgraph(800, 600,SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//原样贴图//定义图片变量去表示图片IMAGE mage;//读取加载图片:loadimage(图片地址,"图片路径 相对 绝对",int nwidth缩放的宽度,int nheight缩放的高度)loadimage(&mage, "./images/bk.png",800,600);//显示图片:putimage(图片的横坐标,图片的纵坐标,图片地址)putimage(0, 0, &mage);//透明贴图(去掉一张图片原本的背景):通过图像的颜色二进制运算达到去背景效果//要处理扣图片:黑白背景IMAGE test[2];//掩码图加载loadimage(test+0,"./images/1.png",800,600);//背景图加载loadimage(test+0,"./images/2.png",800,600);//贴图putimage(100,100,test+0,SRCAND);		//贴掩码图putimage(100,100,test+1,SRCPAINT);		//贴背景图//双缓冲贴图:解决一闪一闪的问题//在BeginBatchDraw();    和     EndBatchDraw();写代码//键盘事件消息demo2中有举例getchar();closegraph();return 0;
}

精灵图(drawImg报错)后面修改

#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<mmsystem.h>				//包含多媒体接口,一定放在graphics.h下面
#pragma comment(lib,"winmm.lib")	//预处理指令接口连接库
#include<easyx.h>					//这个是只包含最新的API(函数接口)
#include<graphics.h>				//这个头文件包含了上面的,还包含了已经不推荐使用的函数	
#include<stdio.h>                   //getchar的头文件
#include<time.h> int main()
{initgraph(500, 500,SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//精灵动画:一排有很多照片实现动画IMAGE img_sheet;loadimage(&img_sheet,"./images/wugui.jpg");const int frameDelay=1000/60;int frameStart=0;int frameTime=0;int imgsize=32;		//每帧的尺寸int frames=7;		//精灵的个数int speed=200;		//速度毫秒int index=0;		//下标:贴那一张图片while (true){frameStart=clock();BeginBatchDraw();cleardevice();drawImg(250,250,imgsize,imgsize,&img_sheet,index * imgsize,0);EndBatchDraw();index=(clock()/speed)%frames;frameTime = clock() - frameStart;if (frameDelay-frameTime>0) //16 -10 = 6 >0{Sleep(frameDelay-frameTime);}getchar();closegraph();return 0;
}

七:背景音乐

#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<mmsystem.h>				//包含多媒体接口,一定放在graphics.h下面
#pragma comment(lib,"winmm.lib")	//预处理指令接口连接库void BGM()
{//读取音乐:文件为.mp3为后缀才可播放,要把音乐拷贝到项目所在文件夹里//打开音乐	//0,0,0为默认输出控制台mciSendString("open ./images/ha.wav alias bgm", 0, 0, 0);	//mciSendString("open ./images/ha.wav", 0, 0, 0);		//播放音乐	重复播放repeatmciSendString("play bgm repeat", 0, 0, 0);//mciSendString("play ./images/ha.wav", 0, 0, 0);//设置音量大小	0~1000mciSendString("setaudio bgm volume to 10",NULL,0,NULL);	//专门用来播放音效					表示路径是文件名  异步PlaySound("./images/ha.wav",NULL,SND_FILENAME|SND_ASYNC);if (0){mciSendString("test./images/ha.wav",0, 0, 0);}
} int main()
{initgraph(500, 500,SHOWCONSOLE);setbkcolor(WHITE);cleardevice();BGM();//调用getchar();closegraph();return 0;
}

八:项目

贪吃蛇 

基于C/C++的easyx实现贪吃蛇游戏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/281501.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jest:JavaScript的单元测试利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

IDEA创建Sping项目只能勾选17和21,没有Java8?

解决办法: 替换创建项目的源 我们只知道IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/

2024 IEEE GRSS Data Fusion Contest Track 2 竞赛总结

一、成绩 二、尝试方案过程 模型上&#xff1a;Swin-smallSwin-base: Val 阶段效果较好Swin-largeKnet-ResNeSt101-FCN: crop-size_512x512 TTA-x5.0-7.0 iter-10k Test 阶段效果较好Segformer-b4Segformer-b5: crop-size_640x640 TTA-x5.0-7.0 2、输入与预处理&#xff1a; 对…

【系统架构师】-第6章-数据库设计基础知识

1、三级模式-两级映像 外模式&#xff1a;视图、用户与数据库的接口 概念模式&#xff1a;表 内模式&#xff1a;存储方式&#xff0c;索引创建等 1&#xff09;外模式-模式映射&#xff1a; 视图与表的映射&#xff0c;表数据发生修改&#xff0c;只需要修改映射&#xf…

面试算法-62-盛最多水的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。…

第十二届蓝桥杯省赛CC++ 研究生组-砝码称重

solution1&#xff08;通过10%&#xff09; 写了几种可能的组合方式&#xff0c;骗到一丢丢分数 #include<iostream> #include<algorithm> #include<map> using namespace std; int main(){int n, a[110], count 0, sum[110] {0};map<int, int> mp…

信创产品测评的范围是哪些?

信创&#xff0c;即信息技术应用创新。过去很多年间&#xff0c;国内 IT 底层标准、架构、生态等大多数都由国外 IT 巨头制定的&#xff0c;由此存在诸多安全风险。因此&#xff0c;我们要逐步建立基于自己的 IT 底层架构和标准&#xff0c;形成自有开放生态&#xff0c;而这也…

第六节:使用SMB开发WebService

一、概述 webservice在日常开发中是常用的接口形式&#xff0c;SMB在设计之初就将webservice作为重要的代理协议。在组件库中提供了webservice input和webservice output两个组件&#xff0c;分别用于发布接口和调用接口。 二、发布webservice 在csdnProject工程中创建名为c…

rust引用本地crate

我们可以动态引用crate&#xff0c;build时从crate.io下载&#xff0c;但可能因无法下载导致build失败。首次正常引用三方crate&#xff0c;build时自动下载的crate源码&#xff0c;我们将其拷贝到固定目录中&#xff1b; build后可在RustRover中按住Ctrl键&#xff0c;在crat…

Qt学习--界面知识点大杂烩

在开发过程中&#xff0c;通常需要打开或者保存上位机数据到本地&#xff0c;这时候就需要用到

【Web】记录[长城杯 2022 高校组]b4bycoffee题目复现

目录 前言 环境准备 简单分析 EXP(两种打法) 生成Payload 恶意类 ①Spring命令执行回显类 ②Filter型内存马 前言 本地jar包运行打通了&#xff0c;远程500&#xff0c;nss靶机有问题&#xff0c;换了bugku就可( 主要记录下做题过程&#xff0c;纯菜狗&#xff0c;小…

jupyter切换默认打开路径

首先打开anaconda输入 : conda activate然后输入 : jupyter notebook 然后可以找到一个路径 : 然后找到相应根目录夹 : 找到标出来的文件; 如果找不到的话 &#xff0c; 输入 : jupyter notebook --generate-config 然后目录下就会出现该文件 ; 然后打开它&#xff0…

Linux 文件系统:重定向、缓冲区

目录 一、重定向 1、输出重定向 2、输入重定向 3、追加重定向 4、dup2 系统调用 二、理性理解Linux系统下“一切皆文件” 了解硬件接口 三、缓冲区 1、为什么要有缓冲区? 2、刷新策略 3、缓冲模式改变导致发生写时拷贝 未创建子进程时 创建子进程时 使用fflush…

【Linux】多线程编程基础

&#x1f4bb;文章目录 &#x1f4c4;前言&#x1f33a;linux线程基础线程的概念线程的优缺点线程与进程的区别 线程的创建 &#x1f33b;linux线程冲突概念互斥锁函数介绍加锁的缺点 &#x1f4d3;总结 &#x1f4c4;前言 无论你是否为程序员&#xff0c;相信多线程这个词汇应…

定时在windows上执行python脚本

现在&#xff0c;有两种方法来执行Python脚本。 第一种方法要写批处理Bat文件&#xff0c;另一种则不需要。 如果您不想写批处理文件&#xff0c; 定时在windows上执行python脚本的步骤如下&#xff1a; 1. 搜索任务计划程序(Task Scheduler) 2. 在右侧“action”窗格下&…

Redis监控工具

Redis 是一种 NoSQL 数据库系统&#xff0c;以其速度、性能和灵活的数据结构而闻名。Redis 在许多领域都表现出色&#xff0c;包括缓存、会话管理、游戏、排行榜、实时分析、地理空间、叫车、聊天/消息、媒体流和发布/订阅应用程序。Redis 数据集完全存储在内存中&#xff0c;这…

QT_day2:页面设计使用ui

1、自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面。&#xff08;不要使用课堂上的图片和代码&#xff0c;自己发挥&#xff0c;有利于后面项目的完成&#xff09; 要求&#xff1a; 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件相关设置&#xff0c…

Python学习:元组

Python 元组概念 Python 中的元组&#xff08;tuple&#xff09;是不可变的有序集合。它是一种数据类型&#xff0c;类似于列表&#xff08;list&#xff09;&#xff0c;但在创建后不能被修改。元组使用圆括号 () 来表示&#xff0c;其中的元素可以是任意类型&#xff0c;并且…

家电工厂5G智能制造数字孪生可视化平台,推进家电工业数字化转型

家电5G智能制造工厂数字孪生可视化平台&#xff0c;推进家电工业数字化转型。随着科技的飞速发展&#xff0c;家电行业正迎来一场前所未有的数字化转型。在这场制造业数字化转型中&#xff0c;家电5G智能制造工厂数字孪生可视化平台扮演着至关重要的角色。本文将从数字孪生技术…

基于SSM的校园失物招领系统设计与实现+数据库+免费远程调试

项目介绍: 基于SSM的校园失物招领系统设计与实现。Javaee项目&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc Mybatis JspVuelayuiElementui来实现。MySQL数…