easy X(C语言图形化界面)学习

news2025/1/21 3:01:22

easy X(C语言图形化界面)学习

  • 易错:
  • 头文件
    • 创建窗口
  • 图形填充
  • 文字创建
  • 输出图片
  • 鼠标消息函数(老版)
  • 鼠标操作(新版)
  • 键盘消息函数
    • getch()
  • 音乐播放
  • 修改窗口标题,弹出框框

易错:

1.文件为(.cpp)后缀

头文件

#include <graphics.h> // 包含图形库的头文件

创建窗口

在这里插入图片描述

# define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h> // 包含图形库的头文件

int main()
{
	// 创建一个窗口  大 小
	initgraph(640, 480);
	
	getchar(); // 保持窗口打开
	
	// 关闭窗口
	closegraph();

	return 0;
}

运行结果如下:
在这里插入图片描述
第三个参数

	//1 创建一个窗口
	initgraph(640, 480,SHOWCONSOLE);
	   // 这里第三个参数是显示控制台
	  //第三个参数,如果是NOCLOSE,窗口关闭键失效。NOMINIMIZE,窗口缩小键失效
	  // 二者 NOCLOSE | NOMINIMIZE ,则全部失效

图形填充

在这里插入图片描述
画几个圆

# define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h> // 包含图形库的头文件

int main()
{
	//1 创建一个窗口
	initgraph(640, 480);

	//设置背景颜色
	setbkcolor(WHITE);
	cleardevice();//清屏


	// 给圆填涂颜色
	setfillstyle(PS_SOLID,5);// 设置线条格式  ps_solid 实线  5个像素
	setfillcolor(YELLOW);// 设置填充颜色
	setlinecolor(BLUE);// 设置线条颜色

	//画个圆
	circle(50, 50, 50);
	fillcircle(50, 150, 50);
	solidcircle(50, 250, 50);

	getchar();
	//2 关闭窗口
	closegraph();

	return 0;
}

在这里插入图片描述

文字创建

在这里插入图片描述
举例:

	//绘制文字
	//设置颜色
	settextcolor(RED);
	//设置文字样式,大小,字体
	settextstyle(50, 0, "楷体");
	//设置背景模式  tran sparent 透明
	setbkmode(TRANSPARENT);
	//设置颜色 RGB
	settextcolor(RGB(0, 255, 13));//画板里的三原色数据
	outtextxy(50, 50, "打印字体咯~");

运行结果:
在这里插入图片描述
RGB画板的三原色数据
在这里插入图片描述

修改outtextxy函数,让其输出多个字符(字符串)
在这里插入图片描述
文字居中

	//把文字居中
	setfillcolor(YELLOW);// 设置填充颜色
	setlinecolor(BLUE);// 设置线条颜色
	setbkmode(TRANSPARENT);
	fillrectangle(200, 50, 500, 100);//500-200=300   100-50=50
	settextcolor(RED);
	char arr[] = "居中好吧!!!";
	int width = 300 / 2 - textwidth(arr) / 2;
	int height = 50 / 2 - textheight(arr) / 2;

	outtextxy(width + 200, height + 50, arr);

运行结果:
在这里插入图片描述


输出图片

在这里插入图片描述
举例:
输出图片相对路径时,把文件放在vs对应的项目文件中

	// 输出图片
	IMAGE img;// 定义一个(变量)对象
	// 加载图片
	// 相对路径:./表示当前文件下,../表示当前文件的上一级目录
	// 绝对路径:C:\Users\30438\Pictures\CSDN插图\MySQL.jpg
	loadimage(&img, "C:\\Users\\30438\\Pictures\\CSDN插图\\MySQL.jpg",250,250);
	//               若文件路径有空格   处理方法举例:\"12 easyX学习\"   
	//                          250,250为照片设置高度,宽度
	//相对路径
	//loadimage(&img, "./MySQL.jpg");
	putimage(0, 0, &img);//前面坐标用变量也可以

运行结果为:

在这里插入图片描述

鼠标消息函数(老版)

在这里插入图片描述

举例:

	//鼠标信息
	while (1)  // 不断地处理事务,需要循环
	{
		if (MouseHit())
		{
			MOUSEMSG msg = GetMouseMsg();
			printf("坐标(%d,%d)\n", msg.x, msg.y);//控制台打印鼠标的坐标
			// 消息分发
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
				outtextxy(400, 400, "鼠标左键按下");
				break;
			case WM_RBUTTONDOWN:
				outtextxy(400, 400, "鼠标右键按下");
				break;
			}
		}
	}

运行结果:
在这里插入图片描述
判断鼠标是否在以上矩形中,若在就输出其语句

// 文字居中
	setfillcolor(YELLOW);// 设置填充颜色
	setlinecolor(BLUE);// 设置线条颜色
	setbkmode(TRANSPARENT);
	fillrectangle(200, 50, 500, 100);//500-200=300   100-50=50
	settextcolor(RED);
	char arr[] = "居中好吧!!!";
	int width = 300 / 2 - textwidth(arr) / 2;
	int height = 50 / 2 - textheight(arr) / 2;

	outtextxy(width + 200, height + 50, arr);

	//鼠标信息
	while (1)  // 不断地处理事务,需要循环
	{
		if (MouseHit())
		{
			MOUSEMSG msg = GetMouseMsg();
			//判断鼠标是否在上面的矩形中,若在就输出一句话,不过这个是重复一直输出
		    //若放在wm_lbuttondown这种,就点击再输出
			
			if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 100)
			{
				printf("鼠标就在这个矩形里了哦\n");
			}


			// 消息分发
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
				outtextxy(400, 400, "鼠标左键按下");
				printf("坐标(%d,%d)\n", msg.x, msg.y);//控制台打印鼠标的坐标
				break;
			case WM_RBUTTONDOWN:
				outtextxy(400, 400, "鼠标右键按下");
				printf("坐标(%d,%d)\n", msg.x, msg.y);//控制台打印鼠标的坐标
				break;
			}
		}
	}

运行结果:
在这里插入图片描述

鼠标操作(新版)

只是换了一个结构体,可以获取更多的信息(鼠标,按键等等等)

ExMessage msg;
	while (1)  // 不断地处理事务,需要循环
	{
		if (peekmessage(&msg,EM_MOUSE))
		{
			// 消息分发
			switch (msg.message)
			{
			case WM_LBUTTONDOWN:
				outtextxy(400, 400, "鼠标左键按下");
				if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 100)
				{
					printf("鼠标就在这个矩形里了哦\n");
				}
				break;
			case WM_RBUTTONDOWN:
				outtextxy(400, 400, "鼠标右键按下");
				printf("坐标(%d,%d)\n", msg.x, msg.y);//控制台打印鼠标的坐标
				break;
			}
		}
	}

运行结果:
在这里插入图片描述

键盘消息函数

非easyX函数
在这里插入图片描述

getch()

用到头文件 conio.h
堵塞函数,不输入一直在这里等

#include <conio.h> // 使用_getch()   获取键位

	while (1)  // 不断地处理事务,需要循环
	{
		char key = _getch();
		printf("%d,%c\n", key, key);
		switch (key)
		{
		case 72://上键
		case 'w':              // 这里是定义了上键为w ,当然也可以定义其他的键位
		case 'W':
			printf("上键\n");
			break;
		case 80://下键
		case 's':
		case 'S':
			printf("下键\n");
			break;
		case 75://左键
		case 'a':
		case 'A':
			printf("左键\n");
			break;
		case 77://右键
		case 'd':
		case 'D':
			printf("右键\n");
			break;
		}
	}

效果演示:
在这里插入图片描述
目前只是在控制台上操作

设置一个小球,对其进行键位控制

int x=0, y=0;
	//鼠标信息
	ExMessage msg;
	while (1)  // 不断地处理事务,需要循环
	{
		// 创建一个小物体,进行移动
		cleardevice();//清屏,除去移动后留下的拖影
		setfillcolor(BLUE);
		fillcircle(x, y, 20);

		char key = _getch();
		printf("%d,%c\n", key, key);
		switch (key)
		{
		case 72://上键
		case 'w':              // 这里是定义了上键为w ,当然也可以定义其他的键位
		case 'W':
			y -= 5;
			printf("上键\n");
			break;
		case 80://下键
		case 's':
		case 'S':
			y += 5;
			printf("下键\n");
			break;
		case 75://左键
		case 'a':
		case 'A':
			x -= 5;
			printf("左键\n");
			break;
		case 77://右键
		case 'd':
		case 'D':
			x += 5;
			printf("右键\n");
			break;
		}
	}

效果演示:
在这里插入图片描述

在显示其他组件(图片什么的)的同时,完成小球移动,就是把其语句放在同一个while循环中,当然这样也会导致界面缓存闪屏
在这里插入图片描述
解决方法,可以创建一个缓冲区(双缓冲绘图)

开始:

	int x = 0, y = 0;// 设置小球的初识位置
	while (1)  // 不断地处理事务,需要循环
	{
		// 双缓冲绘图 ,需要放在绘图代码之前和之后
		BeginBatchDraw();

	    //设置背景颜色(a,b)

结束:

		// 创建一个小物体,进行移动
		setfillcolor(BLUE);
		fillcircle(x, y, 20);
		EndBatchDraw();

		char key = _getch();

完整代码如下:

# define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h> // 包含图形库的头文件
#include <conio.h> // 使用_getch()   键位

int main()
{

	//1 创建一个窗口
	initgraph(640, 480,SHOWCONSOLE);
	                    // 这里第三个参数是显示控制台
	                    //第三个参数,如果是NOCLOSE,窗口关闭键失效。NOMINIMIZE,窗口缩小键失效,二者 | ,则全部失效
	                  
	int x = 0, y = 0;// 设置小球的初识位置
	while (1)  // 不断地处理事务,需要循环
	{
		// 双缓冲绘图 ,需要放在绘图代码之前和之后
		BeginBatchDraw();

	    //设置背景颜色(a,b)
	    setbkcolor(WHITE);//a
	    cleardevice();//b   清屏

		// 输出图片
		IMAGE img;// 定义一个(变量)对象
		// 加载图片
		// 相对路径:./表示当前文件下,../表示当前文件的上一级目录
		// 绝对路径:C:\Users\30438\Pictures\CSDN插图\MySQL.jpg
		loadimage(&img, "C:\\Users\\30438\\Pictures\\CSDN插图\\MySQL.jpg", 250, 250);
		//               若文件路径有空格   处理方法举例:\"12 easyX学习\"   
		//                          250,250为照片设置高度,宽度
		//相对路径
		//loadimage(&img, "./MySQL.jpg");
		putimage(0, 0, &img);//前面坐标用变量也可以

		//鼠标信息
		ExMessage msg;

		// 创建一个小物体,进行移动
		setfillcolor(BLUE);
		fillcircle(x, y, 20);
		EndBatchDraw();// 结束缓冲区

		char key = _getch();
		printf("%d,%c\n", key, key);
		switch (key)
		{
		case 72://上键
		case 'w':              // 这里是定义了上键为w ,当然也可以定义其他的键位
		case 'W':
			y -= 5;
			printf("上键\n");
			break;
		case 80://下键
		case 's':
		case 'S':
			y += 5;
			printf("下键\n");
			break;
		case 75://左键
		case 'a':
		case 'A':
			x -= 5;
			printf("左键\n");
			break;
		case 77://右键
		case 'd':
		case 'D':
			x += 5;
			printf("右键\n");
			break;
		}
	}

	getchar();
	//2 关闭窗口
	closegraph();

	return 0;
}

音乐播放

在这里插入图片描述
这个只支持mp3,网易云的不行

# define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h> // 包含图形库的头文件
#include <conio.h> // 使用_getch()   键位
#include <mmsystem.h>   // 包含多媒体设备接口头文件
                        //必须在graphics头文件下方
#pragma comment(lib,"winmm.lib")//加载静态库
                         // 这是预编译指令

void BGM() // 播放音乐
{
	// 打开音乐,播放音乐      alias  取别名             后面参数调音量等
	mciSendString("open 天后.mp3 alias BGM",0,0,0);
	//              repeat 重复播放   pause 暂停  close 关闭
	mciSendString("play BGM repeat", 0, 0, 0);


}

repeat 重复播放 pause 暂停 close 关闭 resume 继续

修改窗口标题,弹出框框

在这里插入图片描述

void change()
{
	// 获取窗口句柄
	HWND hnd = GetHWnd();
	// 设置窗口标题
	SetWindowText(hnd, "c语言plus");
	//弹出窗口,提示用户操作
	int isok=MessageBox(NULL, "干嘛?","提示标题",MB_OKCANCEL);
	// 这里是NULL,窗口和主窗口都可以拖动,
	  // 若写变量hnd,则是强制小窗口的确认,主窗口一直弹出,且无法点击
	// 其返回值是Int型,可进行赋值判断
	if (isok == IDOK)
	{
		printf("您点击了确认\n");  // 在控制台输出
	}
	else if (IDCANCEL == isok)
	{
		printf("您点击了取消\n");
	}
}

把其操作写入change()函数内
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DDP学习/PyTorch多GPU训练/查看模型在哪个GPU上

参考&#xff1a; pytorch如何查看tensor和model在哪个GPU上 https://blog.csdn.net/weixin_37889356/article/details/121792888Part 3: Multi-GPU training with DDP (code walkthrough) [pytorch官方教程&#xff0c;有股咖喱味的Inglish, 推荐] https://www.youtube.com/w…

5月14日第壹简报,星期日,农历三月廿五

5月14日第壹简报&#xff0c;星期日&#xff0c;农历三月廿五坚持阅读&#xff0c;静待花开1. 福布斯中国锂电产业链TOP100发布&#xff0c;宁德时代、赣锋锂业、比亚迪等入选。2. 平均降价84%&#xff01;山东、湖南、江西等多地骨科脊柱类耗材集采中选结果落地。3. 世界旅游组…

【CSS系列】第八章 · CSS浮动

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

anylabeling 自动标注 使用记录 (跑不起来你打我)

目录 一、anylabeling 二、Segment Anything模型ONNX导出 1、下载这个项目 2、环境配置 3、下载SAM预训练权重 4、导出ONNX格式 三、yaml文件编写 四、视频讲解 五、使用记录 六、其他 一、anylabeling anylabeling项目地址 我直接用的之前yolov5的conda虚拟环境 p…

vim编辑器常用命令 (Centos)

1 安装vim编辑器 sudo yum update sudo yum install vim2 设置vim 显示行号 (:set nu) 步骤1&#xff1a;按 ESC 键 退出本机内容模式 步骤2&#xff1a;输入 :set number 或者 :set nu 步骤3&#xff1a;按回车 3 查找 / 步骤1&#xff1a;按 ESC 键 退出本机内容模式 步…

设计模式 - 工厂

文章参考来源 一、概念 创建简单的对象直接 new 一个就完事&#xff0c;但对于创建时需要各种配置的复杂对象例如手机&#xff0c;没有工厂的情况下&#xff0c;用户需要自己处理屏幕、摄像头、处理器等配置&#xff0c;这样用户和手机就耦合在一起了。 可以使代码结构清晰&a…

Python进阶知识(2)—— 什么是GUI编程?一起来学习用Python,Tkinter“做画”吧

文章目录 01 | &#x1f4d5; 什么是 G U I &#xff1f; \color{red}{什么是GUI&#xff1f;} 什么是GUI&#xff1f;&#x1f4d5;02 | &#x1f4d9; 什么是 T k i n t e r &#xff1f;为什么是 T k i n t e r &#xff1f; \color{orange}{什么是Tkinter&#xff1f;为什么…

ESP32在linux下烧录,提示权限有问题,解决方法

执行idf.py -p /dev/ttyACM0 flash下载时&#xff0c;提示这个错误 serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyACM0: [Errno 13] Permission denied: /dev/ttyACM0 解决方法&#xff1a; 1检查串行端口 /dev/ttyUSB0 是否已被其他程序占用…

神经网络的梯度检查

当编写完一个深层的网络时&#xff0c;可能求导方式过于复杂稍微不小心就会出错&#xff0c;在开始训练使用这个网络模型之前我们可以先进行梯度检查。 梯度检查的步骤如下&#xff1a; 然后反向传播计算loss的导数grad&#xff0c;用以下公式计算误差&#xff1a; 通常来说&…

超星学习通小助手多线程工具Python

话不多说&#xff0c;直接开始&#xff0c;不会安转的直接使用后面两款&#xff0c;下载直接打开exe运行 第一款&#xff1a;网课小助手python&#xff0c;需要自行安装Python环境&#xff08;支持Windows、Mac、Linux各种环境&#xff09; https://wwiv.lanzoul.com/ifVrC0vk…

【K8s】控制器

文章目录 一、认识Pod控制器1、控制器介绍2、控制器种类 二、ReplicaSet&#xff08;RS&#xff09;1、RS的作用与资源清单2、创建RS3、pod扩缩容4、镜像升级5、删除RS 三、Deployment&#xff08;Deploy&#xff09;1、作用与资源清单2、创建deploy3、扩缩容4、镜像更新5、版本…

Vite 是如何站在巨人的肩膀上实现的

所谓的巨人&#xff0c;指的就是 Vite 底层所深度使用的两个构建引擎——Esbuild和Rollup。这两个构建引擎对于 Vite 来说究竟有多重要呢&#xff1f;在 Vite 的架构中&#xff0c;这两者各自扮演了什么样的角色&#xff1f;接下来&#xff0c;我们一起拆解 Vite 的双引擎架构&…

瑞吉外卖项目笔记02——员工管理、设置公共字段自动填充

三、员工信息管理 3.1 添加员工 注意&#xff1a;在设计数据库表字段时&#xff0c;给userName添加了唯一索引&#xff08;所以员工用户名是无法重复的&#xff09; 流程&#xff1a; 前端页面发送POST请求&#xff0c;后端接收到请求和数据&#xff0c;将用户数据添加到数…

PyQt5桌面应用开发(14):数据库+ModelView+QCharts

本文目录 PyQt5桌面应用系列下一个玩具报表一&#xff1a;Markdown文档的列表显示Widget的树、表、列报表Qt中的MVC框架模型视图代理 报表二&#xff1a;Markdown文档的长度图形数据&#xff1a;Markdown文档和Sqlite数据库代码总结 PyQt5桌面应用系列 PyQt5桌面应用开发&#…

FE_Vue学习笔记 框架的执行流程详解

1 分析脚手架结构 &#xff08;1&#xff09;CLI就是 command line interface 的缩写。Vue CLI官网&#xff1a;Vue CLI &#xff08;2&#xff09;安装过程&#xff1a; &#xff08;PS&#xff1a; 提前安装过node.js了&#xff0c;没有安装的可以打开这个&#xff1a;Downl…

Flutter - 搭建引擎调试环境(iOS)

文章目录 前言开发环境安装依赖环境1. python32. depot_tools 获取引擎项目1. 创建engine空目录2. 创建.gclient文件并配置3. 指定引擎版本4. 同步引擎源码 搭建调试环境1. 构建编译1.1 生成构建所需文件1.1.1 主机端1.1.2 iOS端 1.2 完成构建编译 2. Xcode调试2.1 设置本地引擎…

Qt扫盲-QAreaSeries理论总结

QAreaSeries理论总结 一、概述二、使用1. 创建QAreaSeries 对象2. 填充数据3. 设置区域4. 将面积图 与绘图设备关联5. 将绘图设备与 GUI窗口关联 一、概述 QAreaSeries类以面积图的形式显示数据。QAreaSeries用于显示定量数据。它基于QLineSeries 类&#xff0c;边界线条之间的…

二、Docker在Linux下的安装

文章目录 Docker在Linux下的安装Docker安装的前提环境安装1. 卸载旧的版本2. 安装yum-utils包3. 设置镜像的仓库4. 安装Docker相关的内容 启动Docker运行hello-world查看下载的hello-world镜像 了解卸载Docker Docker在Linux下的安装 Docker安装的前提环境 CentOS Docker 安装…

【LLM系列之PaLM】PaLM: Scaling Language Modeling with Pathways

论文题目&#xff1a;《Scaling Instruction-Finetuned Language Models》 论文链接&#xff1a;https://arxiv.org/abs/2204.02311 github链接1&#xff1a;https://github.com/lucidrains/PaLM-pytorch/tree/main; github链接2:https://github.com/conceptofmind/PaLM huggin…

每天一个提高效率的Matlab编程小技巧(1)-dbstop if error

相信在matlab调试程序的时候都遇到过这种情况&#xff1a;运行程序时命令行报错&#xff0c;而且出错的位置在我们自己定义的函数里&#xff0c;比如下面这个例子&#xff1a; 主函数main.m: a[1 2 3]; b[4 5]; csum_squares(a,b); 子函数sum_squares.m function csum_squa…