C/C++/EasyX——入门图形编程(4)

news2024/11/28 12:49:59

【说明】紧接上文(。・ω・。),好了,接下来,就让我们开始学习图像处理和获取鼠标消息的函数吧。(各位友友们不要着急,想在短时间内就想做小游戏或者写出各种好看的画面是不简单的,我们就把它当作一种兴趣一起来学习,慢慢掌握基础知识吧(^v^))

其实这篇文章讲的就是如何在窗口上显示图像以及如何获取鼠标消息,友友们要是想偷点懒,前一个知识点就直接看代码吧,这些文字说实话,有点用处但也不是说,不看就有什么很大影响一样。(^~^)ヽ(*≧ω≦)ノ

--------------------------------------------------------正文-------------------------------------------------------------------

目录

一:图像处理函数的介绍

一(1):图像处理函数

1. loadimage(1,2,3,4,5)—从文件中读取图像

2. ptimage(1,2,3,4)—在当前设备上绘制指定图像

一(2):图像处理函数应用实例

二:鼠标消息函数的介绍

二(1):鼠标消息函数应用实例

1.老版系统的鼠标操作

2.新版系统的鼠标操作     

三:说明


一:图像处理函数的介绍

图像处理函数用于在窗口上显示图片,在使用图像之前,需要定义一个变量(对象),然后把图片加载进变量才能使用。  平时定义变量,使用的都是基础的数据类型,比如 int、double……,在使用图像的时候,需要使用 EastX 提供给我们的数据类型:IMAGE,比如 IMAGE img。

一(1):图像处理函数

主要就是两个——loadimage(1,2,3,4,5),ptimage(1,2,3,4)。因为里面的参数不太容易看,这里就用数字来代替了。

1. loadimage(1,2,3,4,5)—从文件中读取图像

1保存图像的 IMAGE 对象指针
2图片的文件名
3图片的拉伸宽度(不写的话默认为0,即不拉伸)
4图片的拉伸高度(不写的话默认为0,即不拉伸)
5是否调整 IMAGE 的大小以适应图片

2. ptimage(1,2,3,4)—在当前设备上绘制指定图像

1绘制位置的 x 坐标
2绘制位置的 y 坐标
3要绘制的 IMAGE 对象指针
4三元光栅操作码(不用管)

一(2):图像处理函数应用实例

【代码如下】

#include <stdio.h>
#include <graphics.h>
int main()
{
	initgraph(400, 200);
	setbkcolor(WHITE);
	cleardevice();

	//输出图片
	IMAGE img;//定义一个(变量)对象
	//加载图片
	//相对路径: ./表示当前文件下, ../表示文件夹的上一级目录,一般用 ./
	loadimage(&img, "./yb.png",250,150);
	putimage(0, 0, &img);

	getchar();
	closegraph(); 
	return 0;
}

【说明】这个图片是要放在你所建立的这个工程文件中的,还有它的名称要确保正确。打开文件,将你的图片保存在这个文件夹中即可,如图,还可以看到这个文件的项目类型,注意,写代码时图片的文件名是要包含项目类型的。

二:鼠标消息函数的介绍

鼠标消息函数用于获取鼠标的信息,鼠标信息需要使用 MOUSEMSG 类型,比如,MOUSEMSG msg。然后就用 MouseHit()判断是否有鼠标信息(左键、右键、中间、移动)

如果有鼠标消息,就可以进行接收鼠标信息了 msg=GetMouseMsg();

鼠标消息的主要成员:

uMsg——当前鼠标消息;x——当前鼠标 x 坐标;y——当前鼠标 y 坐标.。

其中 uMsg 可以用来判断当前鼠标消息是什么消息

主要的两个消息:WM_LBUTTONDOWN——鼠标左键消息

                             WM_RBUTTONDOWN——鼠标右键消息

二(1):鼠标消息函数应用实例

1.老版系统的鼠标操作

【代码如下】

#include <stdio.h>
#include <graphics.h>
int main()
{
	initgraph(400, 300);
	setbkcolor(WHITE);
	cleardevice();
    setfillcolor(YELLOW);
	setlinecolor(BLACK);
	fillrectangle(100, 50, 300, 150);
	settextcolor(RED);
    
	//鼠标消息
	while (1)
	{
		if (MouseHit())//存在鼠标消息
		{
			MOUSEMSG msg = GetMouseMsg();
			//消息分发
			switch (msg.uMsg)
			{
//鼠标按键时要在窗口内按键,才会显示是左键还是右键
			case WM_LBUTTONDOWN:
				outtextxy(250, 200, "鼠标左键按下");
						break;
			case WM_RBUTTONDOWN:
				outtextxy(250, 200, "鼠标右键按下");
						break;
			}
		}
	}

	getchar();
	closegraph(); 
	return 0;
}

                                 

当然,也可以在上面代码上稍微做一下改动,改动的代码在24,25,28,31,32,34行上

#include <stdio.h>
#include <graphics.h>
int main()
{
	initgraph(400, 300);
	setbkcolor(WHITE);
	cleardevice();
    setfillcolor(YELLOW);
	setlinecolor(BLACK);
	fillrectangle(100, 50, 300, 150);
	settextcolor(RED);
    
	//鼠标消息
	while (1)
	{
		if (MouseHit())//存在鼠标消息
		{
			MOUSEMSG msg = GetMouseMsg();
			//消息分发
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
//当在矩形内部点击鼠标按键时,打印出 Hello World!
				if (msg.x > 100 && msg.x < 300 && msg.y>50 && msg.y < 150)
					printf("Hello World!\n");
				outtextxy(250, 200, "鼠标左键按下");
//每次在窗口内点击鼠标时,都输出点击位置的坐标
				printf("坐标(%d,%d)\n", msg.x, msg.y);
						break;
			case WM_RBUTTONDOWN:
				if (msg.x > 100 && msg.x < 300 && msg.y>50 && msg.y < 150)
					printf("Hello World!\n");
				outtextxy(250, 200, "鼠标右键按下");
				printf("坐标(%d,%d)\n", msg.x, msg.y);
						break;
			}
		}
	}

	getchar();
	closegraph(); 
	return 0;
}

             

2.新版系统的鼠标操作     

 和老版不同的是应用的函数不同,下面注释中有三处感叹号,是不同的地方。最后运行出的结果是一样的。

#include <stdio.h>
#include <easyx.h>
int main()
{
	initgraph(400, 300);
	setbkcolor(WHITE);
	cleardevice();
    setfillcolor(YELLOW);
	setlinecolor(BLACK);
	fillrectangle(100, 50, 300, 150);
	settextcolor(RED);
    
	//鼠标消息
	while (1)
	{
		ExMessage msg;//!!
		if (peekmessage(&msg, WH_MOUSE))//!!
//有鼠标消息,返回真,否则,返回假
		{
			switch (msg.message)//!!
			{
			case WM_LBUTTONDOWN:
				if (msg.x > 100 && msg.x < 300 && msg.y>50 && msg.y < 150)
					printf("Hello World!\n");
				outtextxy(250, 200, "鼠标左键按下");
				//每次在窗口内点击鼠标时,都输出点击位置的坐标
				printf("坐标(%d,%d)\n", msg.x, msg.y);
				break;
			case WM_RBUTTONDOWN:
				if (msg.x > 100 && msg.x < 300 && msg.y>50 && msg.y < 150)
					printf("Hello World!\n");
				outtextxy(250, 200, "鼠标右键按下");
				printf("坐标(%d,%d)\n", msg.x, msg.y);
				break;
			default:
				break;
			}
		}

	}

	getchar();
	closegraph(); 
	return 0;
}

三:说明

希望友友们这一篇学的顺利哦 (。・ω・。) ,大家平常在电脑上打游戏时需要鼠标操作的,那么下一篇就要讲一些鼠标操作函数了,希望我们一起学的开心,友友们动个小手点个赞,给我一点动力吧(^v^)。回见!(>y<)(⌒▽⌒)

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

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

相关文章

【韩顺平Java笔记】第7章:面向对象编程(基础部分)【214-226】

文章目录 214. 递归解决什么问题215. 递归执行机制1216. 递归执行机制2217 递归执行机制3217.1 阶乘218. 递归执行机制4219. 斐波那契数列220. 猴子吃桃221. 222. 223. 224. 老鼠出迷宫1,2,3,4224.1 什么是回溯 225. 汉诺塔226. 八皇后 214. 递归解决什么问题 简单的说: 递归就…

Koa2+mongodb项目实战1(项目搭建)

Koa中文文档 Koa 是一个基于 Node.js 的 Web 应用框架&#xff0c;由 Express 原班人马打造。 Koa 并没有捆绑任何中间件&#xff0c;而是提供了一套优雅的方法&#xff0c;帮助开发者快速地编写服务端应用程序。 项目初始化 创建一个文件夹&#xff1a;ko2-mongodb 打开文件…

Nginx的基础讲解之重写conf文件

一、Nginx 1、什么是nginx&#xff1f; Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。 2、用于什么场景 Nginx适用于各种规模的网站和应用程序&#xff0c;特别是需要高并发处理和负载均衡的场…

Python | Leetcode Python题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:if not points:return 0points.sort(keylambda balloon: balloon[1])pos points[0][1]ans 1for balloon in points:if balloon[0] > pos:pos balloo…

【EO-1(Earth Observing-1)卫星】

EO-1&#xff08;Earth Observing-1&#xff09;卫星是美国国家航空航天局&#xff08;NASA&#xff09;新千年计划&#xff08;New Millennium Program&#xff0c;NMP&#xff09;地球探测部分中的第一颗对地观测卫星。以下是对EO-1卫星的详细介绍&#xff1a; 一、发射与服…

国外电商系统开发-运维系统单个添加被管理服务器

提前设置好您的远程主机的信息&#xff0c;这样才能自动执行任务。否则&#xff0c;自动执行根本无从谈起。登录方式有SSH密码登录、SSH-Key登录两种方式。 最后点击保存。 上面的刷新图标表示在请求该服务器的状态。如果该服务器状态正常&#xff0c;则会显示如下图标&#xf…

业务封装与映射 -- 编码方式(QPSK、DQPSK、QAM)

信号在光通信系统中传输&#xff0c;需要在信号的发送端对原始电信号进行调制&#xff0c;接收端进行解调&#xff0c;恢复成原始的二进制电信号。光通信系统有三种基本的调制方式&#xff1a;ASK&#xff08;调幅&#xff09;/FSK&#xff08;调频&#xff09;/PSK&#xff08…

【AIGC】VoiceControl for ChatGPT指南:轻松开启ChatGPT语音对话模式

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;安装VoiceControl for ChatGPT插件&#x1f4af;如何使用VoiceControl for ChatGPT进行语音输入VoiceControl for ChatGPT快捷键注意点 &#x1f4af;VoiceControl for C…

看门狗电路设计

看门狗电路设计 看门狗是什么应用架构图TPV6823芯片功能硬件时序图为什么要一般是要保持200个毫秒左右的这种低电平的时间看门狗电路实际应用与条件 看门狗是什么 硬件看门狗芯片&#xff0c;Watch DogTimer&#xff0c;可用于受到电气噪音、电源故障、静电放电等影响(造成软件…

【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录解决方案

【AI学习笔记】基于UnityDeepSeek开发的一些BUG记录&解决方案 背景前摇&#xff1a;&#xff08;省流可不看&#xff09; Unity是大学学的&#xff0c;AI是研究生学的&#xff0c;DeepSeek是第一份实习偷师的&#xff0c;三合一的梦是最近开始做的&#xff0c;BUG是今天遇…

VRRP协议个人理解+报文示例+典型配置-RFC2338/RFC3768/RFC5798/RFC9568

个人认为&#xff0c;理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息&#xff0c;更加便于理解协议。 因此本文将在VRRP协议报文的基础上进行介绍。 VRRP协议发展 关于VRRPv2基本原理&#xff0c;可重点参考2004年发布的RFC3768-Virtual Ro…

【python实操】python小程序之函数的方法和赋值的区别

引言 python小程序之函数的方法和赋值 文章目录 引言一、函数的方法和赋值1.1 题目1.2 代码1.2.1 append方法1.2.2 赋值 1.3 代码解释1.3.1 append方法1.3.2 赋值 二、思考2.1 append方法和赋值的区别2.1.1 append方法2.1.2 赋值操作2.1.3 总结 一、函数的方法和赋值 1.1 题目…

通过freepbx搭建小型电话系统的过程

领导说公司的客服电话需要实现语音导航和非工作时间自动接听播放语音提示的功能。任务自然落到了伟大的程序员的头上&#xff0c;本着为公司节约成本原则遂百度了一番&#xff0c;找到了asterisk 和freeswitch两个比较流行的电话系统。经过对比和考虑公司的情况选择了asterisk系…

STM32 通用定时器

一、概述 STM32内部集成了多个定时/计数器&#xff0c;根据型号不同&#xff0c;STM32系列芯片最多包含8个定时/计数器。其中&#xff0c;TIM6、TIM7为基本定时器&#xff0c;TIM2~TIM5为通用定时器&#xff0c;TIM1、TIM8为高级控制定时器。 1.定时器的类型 基本定时器通用定…

C/C++ 中的未定义行为(Undefined Behavior, UB)

0. 简介 在 C/C 编程中&#xff0c;理解未定义行为&#xff08;UB&#xff09;及其相关概念至关重要。本文将对未定义行为进行详细解析&#xff0c;并通过实例展示其影响与处理方法。 1. 概念辨析 在 C/C 中&#xff0c;未定义行为容易与以下两个概念混淆&#xff1a; 1.1 …

【Spring】Spring MVC的项目准备和连接建立

文章目录 1. 什么是 Spring Web MVC1.1 MVC 定义1.2 什么是 Spring MVC 2. 学习 Spring MVC2.1 项目准备2.2 建立连接 1. 什么是 Spring Web MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从已开是就包含在 Spring 框架中。它的正式名称“Spring We…

【pytorch】张量求导

笔者看到了这篇文章&#xff0c;可以很好的解释张量的求导问题&#xff1a; 看到了上面这张图&#xff0c;可以说很好的表示了前向和反向的过程了。 补充几个细节 之前看李沐的d2l&#xff0c;一直不懂为什么矩阵计算时的一些奇奇怪怪的规定&#xff0c;比如为什么一个行向量…

github项目——gpt-pilot自动创建应用

今天扯一扯在github上看到的一个项目gpt-pilot&#xff0c;声称“首个AI程序员”。本来打算玩一下&#xff0c;结果需要配置大语言模型的API&#xff0c;并且只支持OpenAI和claude&#xff08;Qwen呢&#xff09;。有没有玩过的老哥说一下好不好用&#xff01;&#xff01;(对了…

【Postman】接口测试工具使用

干就完啦 Postman发送get请求案例1&#xff1a; Postman发送post请求案例2 Postman发送其他请求 学习目标&#xff1a;能够使用Postman发送get/post/put/delete请求并获取响应结果 Postman发送get请求 首先postman是一款接口调试工具&#xff0c;支持win&#xff0c;mac以及l…

Python | Leetcode Python题解之第456题132模式

题目&#xff1a; 题解&#xff1a; class Solution:def find132pattern(self, nums: List[int]) -> bool:candidate_i, candidate_j [-nums[0]], [-nums[0]]for v in nums[1:]:idx_i bisect.bisect_right(candidate_i, -v)idx_j bisect.bisect_left(candidate_j, -v)if…