.cur 鼠标光标编辑器

详解透明贴图和三元光栅操作 - CodeBus

鼠标指针文件格式解析——Windows(二) (qq.com)

[C/C++] RGBA数组生成Windows下的ico文件_c ico格式-CSDN博客

色环设计 - CodeBus

左键绘制

右键选颜色

ctrl+右键设置鼠标热点

F1导出.cur文件


//代码来源:色环https://codebus.cn/luoyh/colorcircle
//代码来源:alpha透明贴图: https://codebus.cn/yangw/transparent-putimage

//代码来源:cur格式:https://mp.weixin.qq.com/s?__biz=MzkwNzMzMjIyNg==&mid=2247486257&idx=1&sn=1656090e498c22f391c00d0857f4b856&chksm=c0db94dcf7ac1dcacd4618240e05595b984a05b55d5f9f44d277aae41f4353b06bfa5e4294c4&cur_album_id=2474385342163419137&scene=189#wechat_redirect
//代码来源:icon格式生成文件:https://blog.csdn.net/jinzhuojun/article/details/8007586 
#include <stdio.h>
#include <graphics.h>
#include<math.h>
#pragma warning(disable : 4996)		// VS2022 对某些函数警告,但是为了方便移植,就无视这些警告 这样 Devc++ VC2010 VS2022 都能跑

#define PI acos(-1.0)

// 鼠标文件解析
//https://mp.weixin.qq.com/s?__biz=MzkwNzMzMjIyNg==&mid=2247486257&idx=1&sn=1656090e498c22f391c00d0857f4b856&chksm=c0db94dcf7ac1dcacd4618240e05595b984a05b55d5f9f44d277aae41f4353b06bfa5e4294c4&cur_album_id=2474385342163419137&scene=189#wechat_redirect
// 代码来源
//https://blog.csdn.net/jinzhuojun/article/details/8007586
// 中文注释添加自 @ bilibili 民用级脑的研发记录
// 结构注释来自 https://learn.microsoft.com/en-us/previous-versions/ms997538(v=msdn.10)

// 注意这个格式和下文中的 WrietByte 的对应关系

//typedef struct
//{
//    WORD           idReserved;   // Reserved (must be 0)
//    WORD           idType;       // Resource Type (1 for icons)									// 2 指的是 cur 鼠标静态光标文件
//    WORD           idCount;      // How many images?
//    ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
//} ICONDIR, *LPICONDIR;

//typedef struct
//{
//    BYTE        bWidth;          // Width, in pixels, of the image
//    BYTE        bHeight;         // Height, in pixels, of the image
//    BYTE        bColorCount;     // Number of colors in image (0 if >=8bpp)
//    BYTE        bReserved;       // Reserved ( must be 0)
//    WORD        wPlanes;         // Color Planes
//    WORD        wBitCount;       // Bits per pixel
//    DWORD       dwBytesInRes;    // How many bytes in this resource?
//    DWORD       dwImageOffset;   // Where in the file is this image?
//} ICONDIRENTRY, *LPICONDIRENTRY;
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>


// 色环
void DrawColorCircle(int x, int y, int r, int h)
{
	int H = h;
	float S = 1.f;
	float V = 1.f;

	for (int i = 0; i < 360; i++)
	{
		H = int(H + 1) % 360;
		setfillcolor(HSVtoRGB((float)H, S, V));
		solidpie(x - r, y - r, x + r, y + r, i * (PI / 180), (i + 1) * (PI / 180));
	}
}

// 数据写入
void Fwrite(FILE* f, char* data, int byte)				// 一次写入 byte 个字节,且只写一次
{
	if(1!=fwrite(data,byte,1,f))
	{
		perror("fwrite error");
		exit(1);
	}
}
// 数据写入
void WriteByte(FILE* f, unsigned int val,int byte)		// 指定写入几个字节
{
	char data[4];
	assert(byte<=4);									// 如果它的条件返回错误,则终止程序执行——菜鸟教程可查
	memcpy((void*)data,(void*)&val,byte);
	Fwrite(f,data,byte);
}
// 生成cur 格式文件 ,改写自 icon格式文件的生成,仅仅是 wPlane wBitCount 分别作为X,Y热点
void generate_ico_file(const char* filename,char * body,
                       int width, int height, int has_alpha,int HotX,int HotY)
{
	int x,y;
	int index=0;
	int Size=0;
	int offset = 6+ 1*16;								// 6 = 2 +2 +2,这6个byte 是ico,cur通用的文件头。 16= 1+1+1+1 +2 +2,是一个图片的索引占 16 个字节, n个图片的索引占6*16个字节,,n个图片的因为在不同设备上使用不同型号分辨率的图片,这一堆图片都在一个 icon 或cur里
	int bpp=32;											// 32位的位图= 8位 alpha + 8 位 R, 8 位 G, 8 位 B

	FILE* outfile=fopen(filename,"wb");
	if(outfile==NULL)
	{
		perror("fopen error");
		exit(1);
	}
	// icon文件头,类型与图片个数
	WriteByte(outfile,0,2);								// idReserved 保留位,一种格式,可用区分其他文件。
	WriteByte(outfile,1,2);								// idType 文件类型,如果是1 ,就是icon文件,如果是2 则是cur鼠标光标文件,这类文件格式一样。
	WriteByte(outfile,1,2);								// idCount 拥有的图片个数,icon为在不同屏幕上正常显示,会存储多个格式的图片以备选择
	// 具体一个图片的索引信息
	WriteByte(outfile,width,1);							// bWidth
	WriteByte(outfile,height,1);						// bHeight
	WriteByte(outfile,0,1);								// bColorCount
	WriteByte(outfile,0,1);								// bReservered
	WriteByte(outfile,HotX,2);								// wPlanes					// 这里是.cur热点位置 X
	WriteByte(outfile,HotY,2);							// wBitCount					// 这里是.cur热点位置 Y

	Size = 40 + height * ((width + 31) / 32 * 32 / 8 + width * 3);	//Note 4 bytes alignment		// 这里计算文件索引头与图像数据的总数 ,40=4+4+4+2+2+4*6 个字节。 (width+31)/32是计算int 型AND 位图个数,width / 32,但是不能确定%32 的部分,所以+31 然后再除以 32 。1个int 有4个字节,共32bit,每个bit表示一个像素是否被光栅操作 AND 覆盖,行数 * 32计算一共需要多少bit ,/8是确定有多少字节。
	if (bpp == 32)
		Size += height * width;
	WriteByte(outfile,Size, 4);			//dwBytesInRes
	WriteByte(outfile,offset, 4);			//dwImageOffset

	WriteByte(outfile,40, 4);				//biSize
	WriteByte(outfile,width, 4);			//biWidth
	WriteByte(outfile,2 * height, 4);		//biHeight
	WriteByte(outfile,1, 2);				//biPlanes
	WriteByte(outfile,bpp, 2);				//biBitCount
	WriteByte(outfile,0, 4);				//biCompression
	WriteByte(outfile,0, 4);				//biSizeImage
	WriteByte(outfile,0, 4);				//biXPelsPerMeter
	WriteByte(outfile,0, 4);				//biYPelsPerMeter
	WriteByte(outfile,0, 4);				//biClrUsed
	WriteByte(outfile,0, 4);				//biClrImportant

	// XOR mask
	for (y=height - 1 ; y >= 0; --y)   					// 调换打印高度就不会读取了 ,确定为倒置打印,windows倒着读取数据.从左往右,从下往上,所以为了图片倒着读取之后是正的,需要把原图第一行像素数据打印到倒数最后一行
	{
		for (x = 0; x < width; ++x)
		{
			index = (y * width + x) * 4;
			WriteByte(outfile, body[index], 1);        //Blue
			WriteByte(outfile, body[index + 1], 1);    //Green
			WriteByte(outfile, body[index + 2], 1);    //Red
			WriteByte(outfile, has_alpha ? body[index + 3] : 255, 1); //Alpha
		}
	}

	// AND mask
	for (y = 0; y < (height * ((width + 31) / 32 * 32 / 8)); ++y)
	{
		WriteByte(outfile, 1, 1);						// 1 在屏幕上显示图片,0则不显示图片,表示为整个图片没有。 三元光栅操作参考
	}

	fclose(outfile);
}


int main()
{

	initgraph(1640, 980, 1);
	setbkcolor(GREEN);
	cleardevice();

	int** mesh;
	int drawdesklx;					// 绘图板左上角坐标
	int drawdeskly;
	int pixnum;						// 一个正方形瓦片边长像素
	int mapi;						// 一列有多少个小方格
	int mapj;						// 一行有多少个小方格
	int drawmapi;					// 网格坐标
	int drawmapj;
	int drawoldmapi;				// 同一次绘制的前一个涂色的位置
	int drawoldmapj;
	int isdraw;						// 绘制状态
	int drawdeskrx;					// 绘图板右下角坐标
	int drawdeskry;
	int drawsmallflag;
	drawsmallflag=0;
	drawdesklx=200;
	drawdeskly=200;
	mapi=32;						// 默认 64*64 大小的  .cur文件	// 这里改参数只会改写分辨率,一个像素对应屏幕一个或多个像素,但不会改变图标大小。数值过大会生成失败,原因是int数值上限比较小,不够存储数据了
	mapj=32;														// 这里改参数只会改写分辨率,一个像素对应屏幕一个或多个像素,但不会改变图标大小。 数值过大会生成失败,原因是int数值上限比较小,不够存储数据了
	drawmapi=-1;
	drawmapj=-1;
	pixnum = 16 ;
	drawoldmapi=-1;
	drawoldmapj=-1;
	drawdeskrx=drawdesklx+pixnum*mapj;				// 瓦片个数 * 一个瓦片的像素 = 画板总长度
	drawdeskry=drawdeskly+pixnum*mapi;


	int left=0;								// 刷新绘图板的当前瓦片位置坐标
	int top=0;
	int pentake=0x8FFF0000;					// 选中的 ARGB 透明度与颜色
	int image[mapi * mapj];					// 分配像素内存
	int i, j;

	int background = 0x0000CCFF;			// 背景色:天依蓝,颜色按十六进制数
	int HotX=0;								// 鼠标热点位置
	int HotY=0;

	mesh = new int* [mapi];
	for(int i=0; i<mapi; i++)
		mesh[i]=new int[mapj];

	for(int i=0; i<mapi; i++)
	{
		for(int j=0; j<mapj; j++)
		{
			mesh[i][j]=0;						// 加入默认的背景色

		}
	}

	int h = 0;
	DrawColorCircle(800+640 / 4, 480 / 2, 140, h);		// 绘制色环
	setfillcolor(RGB(128, 126, 129));




	for (int i = 0; i < mapi ; i++)
	{
		left = 0;
		for (int j = 0; j < mapj ; j++)
		{
			int pennumber = mesh[i][j];					// 读取游戏大地图数组序号



//https://codebus.cn/yangw/transparent-putimage
//透明色混合原理与透明色计算代码来源
			int sa = ((pennumber & 0xff000000) >> 24);
			int sr = ((pennumber & 0xff0000) >> 16);	// 源值已经乘过了透明系数
			int sg = ((pennumber & 0xff00) >> 8);		// 源值已经乘过了透明系数
			int sb =   pennumber & 0xff;				// 源值已经乘过了透明系数
			int dr = ((background& 0xff0000) >> 16);
			int dg = ((background & 0xff00) >> 8);
			int db =   background & 0xff;
			int dst = ((sr + dr * (255 - sa) / 255) << 16)		// sr = 0 dr =255, sa=0, dst->red = 255,即sa = 0 时,dr 占优。sr = 255, dr=0, sa=255, dst->red = 255, sa=255时,sr 占优
			          | ((sg + dg * (255 - sa) / 255) << 8)
			          |  (sb + db * (255 - sa) / 255);

			setfillcolor(BGR(dst));								// COLORREF 的颜色格式是 ABGR ,需要把 RGB 转换成 BGR 格式,然后打印出画板的颜色和保存的图片颜色一样,图片按ARGB 保存,但是画板按ABGR打印
			fillrectangle(drawdesklx+left, drawdeskly+top, drawdesklx+left + pixnum, drawdeskly+top + pixnum);

			left += pixnum;										// 往右移动,准备下一次绘制位置,
		}
		top += pixnum;											// 往下移动,准备下一次绘制位置
	}


	char icon[200]="图标预览";
	setbkmode(TRANSPARENT);													// 设置背景为透明
	settextcolor(BLACK);													// 设置字颜色为黑
	outtextxy(40,160,icon);													// 打印提示

	setfillcolor(GREEN);
	fillrectangle(10,100,300,140) ;											// 覆盖之前的文字提示
	char tips[200];
	sprintf(tips,"热点位置 HotX HotY = %d,%d",HotX,HotY);					// 格式化数字
	setbkmode(TRANSPARENT);													// 设置背景为透明
	settextcolor(BLACK);													// 设置字颜色为黑
	outtextxy(10,100,tips);													// 打印提示



	ExMessage m;
	while(1)
	{
		while(peekmessage(&m,EX_KEY|EX_MOUSE,1))
		{
			switch (m.message)
			{
				case WM_LBUTTONDOWN:
					if(m.x>drawdesklx&&m.y>drawdeskly&&m.x<drawdeskrx&&m.y<drawdeskry)										// 绘制
					{
						isdraw=1;
						drawmapi=-1;
						drawmapj=-1;
					}
					break;
				case WM_LBUTTONUP:

					isdraw=0;
					drawoldmapi=-1;
					drawoldmapj=-1;
					drawsmallflag=0;
					break;
				case WM_RBUTTONDOWN:
					if(m.x>drawdesklx&&m.y>drawdeskly&&m.x<drawdeskrx&&m.y<drawdeskry&&m.ctrl)										// 绘制
					{
						HotY=(m.y-drawdeskly)/pixnum;
						HotX=(m.x-drawdesklx)/pixnum;
						setfillcolor(GREEN);
						fillrectangle(10,100,300,140) ;											// 覆盖之前的文字提示
						char tips[200];
						sprintf(tips,"热点位置 HotX HotY = %d,%d",HotX,HotY);					// 格式化数字
						setbkmode(TRANSPARENT);													// 设置背景为透明
						settextcolor(BLACK);													// 设置字颜色为黑
						outtextxy(10,100,tips);													// 打印提示
					}
					else
					{
						pentake = getpixel(m.x,m.y);
						setfillcolor(pentake);
						fillrectangle(800,500,900,600);
						pentake=pentake|0xFF000000;											// 要颜色转换完毕前再补充alpha 通道,否则半透明
						pentake=BGR(pentake);												// 因为 getpixel 已经是 BGR了,但是在后面的上色还个BGR转换,所以还需要再转换一次BGR来抵消后面的BGR转换。
						// BGR转换是因为保存数据时是 RGB 保存,但是当绘制图像时,却是蓝色红色相反,所以绘制的时候要调整蓝色红色,保存的是按RGB来 
						setfillcolor(GREEN);
						fillrectangle(800,400,1140,440);
						char colortips[200];
						sprintf(colortips,"new alpha:%d,red:%d,green:%d,blue:%d",(pentake&0xFF000000)>>24,(pentake&0x00FF0000)>>16,(pentake&0x0000FF00)>>8,(pentake&0x000000FF));
						outtextxy(800,400,colortips);										// 打印颜色提示

					}

					break;
				case WM_KEYDOWN:
					switch (m.vkcode)
					{
						case VK_F1:
							int width=mapj;
							int height=mapi;
							for (i = 0; i < height; ++i)
							{
								for (j = 0; j < width; ++j)
								{
									image[i * width + j]  = mesh[i][j];  										// 透明色 叠加 网格数据
								}																				// Alpha 透明 0x00, red: 00, green: 00, blue: 00  各 bit 位对应 ARGB
							}																					// 0x00000000是完全透明 0x5F000000 可以看出来不完全透明,可知透明度可调节
							generate_ico_file("testv8_透明度测试.cur", (char *)image, width, height, 1,HotX,HotY);
							printf("Save cur,文件名:testv8_透明度测试.cur\n");
							break;
					}
			}
		}
		if(isdraw)
		{
			if(m.x>drawdesklx&&m.y>drawdeskly&&m.x<drawdeskrx&&m.y<drawdeskry)
			{
				drawmapi=(m.y-drawdeskly)/pixnum;
				drawmapj=(m.x-drawdesklx)/pixnum;
				if(drawmapi!=drawoldmapi||drawmapj!=drawoldmapj)		// 检测是否是旧位置
				{
					mesh[drawmapi][drawmapj]=pentake;
					drawoldmapi=drawmapi;
					drawoldmapj=drawmapj;
					drawsmallflag=1;
				}
			}
		}


		if(drawsmallflag==1)
		{
			top=0;
			left=0;
			for (int i = 0; i < mapi ; i++)
			{
				left = 0;
				for (int j = 0; j < mapj ; j++)
				{
					int pennumber = mesh[i][j];							// 读取游戏大地图数组序号
//https://codebus.cn/yangw/transparent-putimage
//透明色混合原理与透明色计算代码来源
					int sa = ((pennumber & 0xff000000) >> 24);
					int sr = ((pennumber & 0xff0000) >> 16);	// 源值已经乘过了透明系数
					int sg = ((pennumber & 0xff00) >> 8);		// 源值已经乘过了透明系数
					int sb =   pennumber & 0xff;				// 源值已经乘过了透明系数
					int dr = ((background& 0xff0000) >> 16);
					int dg = ((background & 0xff00) >> 8);
					int db =   background & 0xff;

					int dst = ((sr + dr * (255 - sa) / 255) << 16)			// sr = 0 dr =255, sa=0, dst->red = 255,即sa = 0 时,dr 占优。sr = 255, dr=0, sa=255, dst->red = 255, sa=255时,sr 占优
					          | ((sg + dg * (255 - sa) / 255) << 8)
					          |  (sb + db * (255 - sa) / 255);
					setfillcolor(BGR(dst));								// COLORREF 的颜色格式是 ABGR ,需要把 RGB 转换成 BGR 格式,然后打印出画板的颜色和保存的图片颜色一样,图片按ARGB 保存,但是画板按ABGR打印
					fillrectangle(drawdesklx+left, drawdeskly+top, drawdesklx+left + pixnum, drawdeskly+top + pixnum);

					left += pixnum;										// 往右移动,准备下一次绘制位置,
				}
				top += pixnum;											// 往下移动,准备下一次绘制位置
			}

			top=0;
			for (int i = 0; i < mapi ; i++)
			{
				left = 0;
				for (int j = 0; j < mapj ; j++)
				{
					int pennumber = mesh[i][j];							// 读取游戏大地图数组序号
//https://codebus.cn/yangw/transparent-putimage
//透明色混合原理与透明色计算代码来源
					int sa = ((pennumber & 0xff000000) >> 24);
					int sr = ((pennumber & 0xff0000) >> 16);	// 源值已经乘过了透明系数
					int sg = ((pennumber & 0xff00) >> 8);		// 源值已经乘过了透明系数
					int sb =   pennumber & 0xff;				// 源值已经乘过了透明系数
					int dr = ((background& 0xff0000) >> 16);
					int dg = ((background & 0xff00) >> 8);
					int db =   background & 0xff;

					int dst = ((sr + dr * (255 - sa) / 255) << 16)			// sr = 0 dr =255, sa=0, dst->red = 255,即sa = 0 时,dr 占优。sr = 255, dr=0, sa=255, dst->red = 255, sa=255时,sr 占优
					          | ((sg + dg * (255 - sa) / 255) << 8)
					          |  (sb + db * (255 - sa) / 255);

					// 绘制预览图
					putpixel(drawdesklx-64+left,drawdeskly-32+top,BGR(dst));						// COLORREF 的颜色格式是 ABGR ,需要把 RGB 转换成 BGR 格式,然后打印出画板的颜色和保存的图片颜色一样,图片按ARGB 保存,但是画板按ABGR打印

					left += 1;										// 往右移动,准备下一次绘制位置,
				}
				top += 1;											// 往下移动,准备下一次绘制位置
			}
		}



		Sleep(2);
	}

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分组查询得到一列多行数据后,怎么用来和表中的某列数据进行一一比较

#10&#xff09;查询每个学生超过他自己选修课程平均成绩的课程号 这里要先进行分组得到每个学号对应的平均成绩&#xff0c;在用表中的成绩grade与得到的平均成绩一一比较 这里可以进行连表操作&#xff0c;把分组查询得到的结果与原表通过sno学号进行等值连接 &#xff0c;就…

轻量级SQLite可视化工具Sqliteviz

什么是 Sqliteviz &#xff1f; Sqliteviz 是一个单页面离线优先的渐进式网络应用&#xff08;PWA&#xff09;&#xff0c;用于完全客户端的 SQLite 数据库或 CSV 文件的可视化。 所谓完全客户端&#xff0c;就是您的数据库永远不会离开您的计算机。使用 sqliteviz&#xff0c…

ubuntu server 安装emqx tdengine

文章目录 1 安装emqx2 安装taos 1 安装emqx 86 wget https://www.emqx.com/zh/downloads/broker/5.6.0/emqx-5.6.0-ubuntu22.04-amd64.deb87 ls88 pwd89 sudo apt install ./emqx-5.6.0-ubuntu22.04-amd64.deb90 sudo systemctl start emqx91 systemctl status emqx92 s…

C语言求自幂数(水仙花数与其他自幂数)

前言 今天我们来看一下如果求解自幂数&#xff08;水仙花数&#xff09;&#xff0c;水仙花数是自幂数的一种&#xff0c;我们来看看自幂数的概念吧&#xff0c;当一个n位数&#xff0c;它的每个位上的数字的n次幂之和等于它本身的时候&#xff0c;我们称这个数为自幂数。水仙花…

文本溢出体验进阶:CSS 技巧实现单行/多行隐藏展示以及实际场景应用,确保内容可读性和布局整洁性

CSS文本溢出隐藏是一种常见的场景&#xff0c;它广泛应用于各种网页设计中&#xff0c;旨在确保内容的可读性和布局的整洁性&#xff0c;特别是在空间有限或需要适应不同屏幕尺寸的情况下。 一、文本溢出隐藏并显示省略号 1、单行文本溢出隐藏并显示省略号 对于单行文本&…

怎么找程序员对象?和程序员谈恋爱是什么体验?

和程序员谈恋爱是一种非常累的体验&#xff0c;因为他们大部分时间都会加班&#xff0c;守在电脑面前不能够陪自己。但是这样的男孩子&#xff0c;忠诚、认真、不会花花草草、收入贼高&#xff0c;恋爱幸福指数接近满分哦&#xff01; 程序员都是宅男&#xff0c;都是电脑狂魔&…

中科院JCR期刊分区介绍

文章目录 1. 背景2. 简介3. 学科分类方法4. 分区表计算方法5. 分区指标说明5.1 IF5.2 3年平均IF5.3 CI 6. 中科院分区和JCR期刊分区有哪些异同&#xff1f;6.1 数据基础相同6.2 学科划分小类部分相同 1. 背景 SCI作为论文与引文分析的重要手段, 被国内各级科研管理部门所重视,…

stm32开发之threadx之modulex模块文件的生成脚本项目

前言 为了保证在window上运行&#xff0c;且体积小的问题&#xff0c;所以采用c语言编写生成脚本,将相关路径由json文件进行配置,使用了一个cjson库进行解析项目构建使用的是cmake 项目代码 CMakeLists文件 cmake_minimum_required(VERSION 3.27) project(txm_bat_script C…

stm32开发之threadx+modulex+filex+shell组件(实现命令行动态加载程序)

前言 前几篇博客基本上已经将filex、levelx、threadx、modulex、shell 组件大概都记录了一遍.本篇博客做个综合实际案例记录. 实现效果 代码程序 Modulex组件 源文件 /** Copyright (c) 2024-2024&#xff0c;shchl** SPDX-License-Identifier: Apache-2.0** Change Logs:…

easyx库的学习(文字绘制)

前言 昨天刚刚写完了基本图形的制作&#xff0c;今天直接可以来看看&#xff0c;在easyx中使用文字 直接看代码吧 文字绘制 void drawTest() {printf("hello,EasyX");//指的是在控制台打印//设置字体大小&#xff0c;样式settextstyle(30, 0, "微软雅黑&quo…

4.4 @ControllerAdvice全局数据处理

4.4 ControllerAdvice全局数据处理 1. 全局异常处理 &#xff20;ExceptionHandler2. 添加全局数据 ModelAttribute3. 请求参数预处理 InitBinder 顾名思义&#xff0c;&#xff20;ControllerAdvice 就是&#xff20;Controller 增强版。&#xff20;ControllerAdvice 主要用来…

【LAMMPS学习】八、基础知识(3.8)计算扩散系数

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

esp32-通过wifi使用timelib库同步时间(三)

库的安装 本文基于platformIO&#xff0c;安装较为简单如下图 实例代码 完整代码如下&#xff0c;如果时间获取超时请使用time1.aliyun.com获取时间。 /** Time_NTP.pde* Example showing time sync to NTP time source** This sketch uses the Ethernet library*/#include …

通过实例学C#之序列化与反序列化XmlSerializer类

简介 可以将类序列化成xml文件&#xff0c;或者将xml文件反序列化成类对象&#xff0c;一般用于保存或加载项目参数。 构造函数 XmlSerializer() 不使用函数创建一个xmlSerializer对象。 XmlSerializer(Type type) 使用type对象创建一个xmlSerializer对象&#xff0c;注意&…

NotePad++联动ABAQUS

Abaqus 中脚本运行 1. 命令区kernel Command Line Interface &#xff08;KCLI&#xff09; execfile(C:\\temp\second develop\chapter2\pyTest1.py)2. CAE-Run Script File->Run Script 3. Abaqus command Abaqus cae noGUIscript.py(前后处理都可)Abaqus Python scr…

牛x之路 - Day1

Day1 微积分之屠龙宝刀&#xff08;武林秘籍&#xff09; 之前的一些东西都在pdf上记得笔记&#xff0c; 没有在这个上面展示一遍&#xff0c;只好学到相关内容的时候再提叙啦&#xff1b;所以其实再写这个小记的时候&#xff0c;我已经看了一半的书&#xff0c;但是不要紧&am…

【结构型模式】组合模式

一、组合模式概述 组合模式的定义与意图&#xff1a;将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。&#xff08;对象结构型&#xff09; 组合模式分析&#xff1a; 1.当容器对象的某一个方法被调用时&#xff0c;将遍…

OpenHarmony网络协议通信—kcp

kcp 是一种 ARQ 协议,可解决在网络拥堵情况下 tcp 协议的网络速度慢的问题 下载安装 直接在 OpenHarmony-SIG 仓中搜索 kcp 并下载。 使用说明 准备一套完整的 OpenHarmony 3.1 Beta 代码 库代码存放路径&#xff1a;./third_party/kcp 修改添加依赖的编译脚本 在/develo…

书生·浦语实战营第二期(六)——Agent

一、概述&#xff1a; 1.1、Lagent: Lagent 是一个轻量级开源智能体框架&#xff0c;旨在让用户可以高效地构建基于大语言模型的智能体。同时它也提供了一些典型工具以增强大语言模型的能力。 Lagent 目前已经支持了包括 AutoGPT、ReAct 等在内的多个经典智能体范式&#xf…

jeecgflow之camunda工作流-串行流程

引言 UserTask用户任务,是需要人处理后才能流转的任务。 本文将构建一个简单的串行流程带大家快速入门camunda工作流。 BPMN在线建模 如需亲自体验文章案例&#xff0c;请访问如下网址。 JeecgFlow演示站点 需求 我们以三国为背景&#xff0c; 假设系统中拥有将军&#xff0c…