基于C/C++的easyx图形库教程_c++ easyx-程序员宅基地

技术标签: 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.h
				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;
				}
			}*/

	//第二种 键盘异步交互:方法调用(更加丝滑)
			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.y
			case 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);		

		//播放音乐	重复播放repeat
			mciSendString("play bgm repeat", 0, 0, 0);
			//mciSendString("play ./images/ha.wav", 0, 0, 0);

		//设置音量大小	0~1000
			mciSendString("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实现贪吃蛇游戏

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liu17234050/article/details/136800991

智能推荐

Ubuntu安装配置Mysql_ubuntuan安装mysql-程序员宅基地

文章浏览阅读406次。三种安装方式:  1. 从网上安装 sudo apt-get install mysql-server。装完已经自动配置好环境变量,可以直接使用mysql的命令。    注:建议将/etc/apt/source.list中的cn改成us,美国的服务器比中国的快很多。  2. 安装离线包,以mysql-5.0.45-linux-i686-icc-glibc23.tar.gz为例。  _ubuntuan安装mysql

全栈从0到1 3D旅游地图标记和轨迹生成

实现输入地点或地点关键字,查询经纬度,从而完成标记点的定义。首先查询Convex数据库,提供10个最匹配的候选项若没有找到对应候选项,用户可以点击搜索按钮,会调用高德API进行查询。如果仍然没有查询到,可以点击“经纬度”按钮,进行经纬度的自行填写。已经添加了的标记点,支持编辑和删除。使用Zustand,进行地点增、删、改等状态管理。}));},// 移除location== id)}));

FineReport——获取控件值和单元格值_contentpane.getcellvalue-程序员宅基地

文章浏览阅读5.2k次。FineReport——获取控件值和单元格值_contentpane.getcellvalue

粘合聚酰亚胺PI材料使用UV胶,具有高强度粘接的优势,这个操作需要有专业的设备吗?(三十六)

这是实现UV胶固化的核心设备。UV固化设备可能有不同的形式和规格,如手持式UV灯、台式UV固化机或流水线式的UV固化设备等,选择哪种设备主要取决于生产规模、操作要求和预算。请注意,选择和使用这些设备时,应遵循制造商的操作指南和安全建议,以确保操作的安全性和有效性。此外,对于大规模或高要求的生产应用,可能需要更高级的自动化设备和系统来实现高效、精确的。:由于UV胶和UV固化设备可能涉及一些安全风险,如紫外线辐射和化学品的潜在危害,因此需要佩戴适当的防护设备,如防护眼镜、手套和防护服等。胶以实现对聚酰亚胺(

“无媒体,不活动”,这句话怎么理解?

综上所述,"无媒体,不活动"反映了媒体在现代社会中的重要作用,无论是在商业、教育还是日常生活中,媒体都扮演着关键角色。这句话提醒我们,要充分利用媒体的力量,同时也要注意媒体使用的方式和效果,确保其正面影响。“无媒体,不活动”通常指的是在现代社会中,媒体对于各种活动,尤其是公共活动和事件的推广、宣传和影响力是至关重要的。它强调了媒体在塑造公众意识、传播信息、影响公众观点和行为方面的作用。搭建媒体传播纽带,共建多方价值平台,专注中小初创,免费定制传播方案。传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。

day17-day20_项目实战&项目部署

DevOps是Development和Operations两个词的缩写,引用百度百科的定义:DevOps是一种方法或理念,它涵盖开发、测试、运维的整个过程。DevOps是提高软件开发、测试、运维、运营等各部门的沟通与协作质量的方法和过程,DevOps强调软件开发人员与软件测试、软件运维、质量保障(QA)部门之间有效的沟通与协作,强调通过自动化的方法去管理软件变更、软件集成,使软件从构建到测试、发布更加快捷、可靠,最终按时交付软件。传统的软件开发流程如下:1、项目经理分配模块给开发人员。

随便推点

Zynq-7000能干什么_zynq平台优点-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏15次。Zynq-7000能干什么1 背景知识因为Zynq-7000 PS(Processing System)端嵌入了Cortex-A9 ARM 处理核以及PL(Programmable Logic)端为基于Kintex-7或者Artix-7的FPGA架构使得Xilinx Zynq-7000更加强悍,应用领域更加广泛。下面将从以下方面介绍Zynq-7000的应用领域:汽车、通信系统、机器人、控制..._zynq平台优点

高性能 golang 生成指定长度随机字符串-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏6次。先直接贴代码吧。package mainimport ( "math/rand" "time")var letters = []byte("abcdefghjkmnpqrstuvwxyz123456789")var longLetters = []byte("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW...

【西北大学】-844计算机科学与技术/软件工程-复试注意事项【考研复习】-程序员宅基地

文章浏览阅读1.6k次,点赞43次,收藏33次。本文提到的西北大学是位于密歇根湖泊畔的西北大学。西北大学(英语:Northwestern University,简称:NU)是美国的一所著名私立研究型大学。

js 格式化prettier配置_解决vscode eslint与prettier冲突-程序员宅基地

文章浏览阅读1.4k次。起因vscode 升级了 prettier 3.0+之后,eslint 与 prettier 配合使用的配置总是冲突,保存自动格式化时人都快搞没了!!版本 :vscode v1.41.1 、vscode-prettier v3.18.0、 vscode-eslint v2.0.11我的方案按推荐删除原来的 prettier 设置,然后迁移到在 package.json 中// package.js..._prettier - javascript formatter

Android高级工程师进阶学习,重磅分享-程序员宅基地

文章浏览阅读573次,点赞23次,收藏13次。我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。字节高级Android经典面试题和答案。

RuoYi -- Git、注解机制、项目本身、_ruo-yi-git-程序员宅基地

文章浏览阅读778次。Git版本控制( Revision control)是一种在并发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。实现跨区域多人协同开发 追踪和记载一个或者多个文件的历史记录 组织和保护你的源代码和文档 统计工作量 并行开发、提高开发效率跟踪记录整个软件的开发过程 减轻开发人员的负担,节省时间,同时降低人为错误版本控制的分类1、本地版本控制 (以RCS为代表)记录文件每次的更新,可以对每个版本做一个快照,或是记录.._ruo-yi-git

推荐文章

热门文章

相关标签