当前位置:首页 > 趣味小程序 > 正文内容

【C++图形化编程】EasyX函数~鼠标操作相关函数

亿万年的星光4年前 (2021-03-05)趣味小程序19919

在EasyX中,我们可以用控制鼠标的相关函数。

FlushMouseMsgBuffer清空鼠标消息缓冲区
GetMouseMsg获取一个鼠标消息。如果当前鼠标消息队列中没有,就一直等待
PeekMouseMsg获取一个鼠标消息,并立即返回。
MouseHit检测当前是否有鼠标消息。
MOUSEMSG保存鼠标消息的结构体。


首先介绍一下MOUSMSG的参数

struct MOUSEMSG{
	UINT uMsg;			// 当前鼠标消息
	bool mkCtrl;		// Ctrl 键是否按下
	bool mkShift;		// Shift 键是否按下
	bool mkLButton;		// 鼠标左键是否按下
	bool mkMButton;		// 鼠标中键是否按下
	bool mkRButton;		// 鼠标右键是否按下
	int x;				// 当前鼠标 x 坐标(物理坐标)
	int y;				// 当前鼠标 y 坐标(物理坐标)
	int wheel;			// 鼠标滚轮滚动值};

其中uMsg是指定鼠标消息类型,可以为以下值


含义
WM_MOUSEMOVE鼠标移动消息
WM_MOUSEWHEEL鼠标滚轮拨动消息。
WM_LBUTTONDOWN左键按下消息
WM_LBUTTONUP左键弹起消息
WM_LBUTTONDBLCLK左键双击消息
WM_MBUTTONDOWN中键按下消息
WM_MBUTTONUP中键弹起消息
WM_MBUTTONDBLCLK中键弹起消息
WM_RBUTTONDOWN右键按下消息
WM_RBUTTONUP右键弹起消息
WM_RBUTTONDBLCLK右键双击消息

例如下面这段代码就可以获取用户点击的坐标:

#include <graphics.h>		// 引用图形库头文件
#include<cstdio>

int main(){

	initgraph(640, 480, SHOWCONSOLE);	// 创建绘图窗口,大小为 640x480 像素,并显示控制台
	while(1){
	
		if(MouseHit())
		{
			MOUSEMSG msg = GetMouseMsg();
			switch(msg.uMsg)
			{
			case WM_LBUTTONDOWN: //左键按下
				printf("左键按下,当前坐标为(%d,%d)\n", msg.x,msg.y);
				break;
			case WM_RBUTTONDOWN: //右键按下
				printf("右键按下,当前坐标为(%d,%d)\n", msg.x, msg.y);
				break;
			}
		}
	}
	
	getchar();				// 按任意键继续
	closegraph();			// 关闭绘图窗口
	return 0;
}

效果:

  


也可以使用下面的这个用来直接在绘图窗口显示:

#include <graphics.h>		// 引用图形库头文件
#include<cstdio>

int main(){

	initgraph(640, 480, SHOWCONSOLE);	// 创建绘图窗口,大小为 640x480 像素,并显示控制台
	while(1){
	
		if(MouseHit())
		{
			cleardevice(); //清屏
			MOUSEMSG msg = GetMouseMsg();

			switch(msg.uMsg)
			{
			case WM_LBUTTONDOWN: //左键按下
				//printf("左键按下,当前坐标为(%d,%d)\n", msg.x,msg.y);
				outtextxy(300,300,"鼠标左键按下");
				break;
			case WM_RBUTTONDOWN: //右键按下
				//printf("右键按下,当前坐标为(%d,%d)\n", msg.x, msg.y);
				outtextxy(400,400,"鼠标右键键按下");
				break;
			}
		}
	}
	
	getchar();				// 按任意键继续
	closegraph();			// 关闭绘图窗口
	return 0;
}


小案例:

用户点击某个位置,显示点击效果。

#include <graphics.h>		// 引用图形库头文件
#include<cstdio>

int main(){

	initgraph(640, 480, SHOWCONSOLE);	// 创建绘图窗口,大小为 640x480 像素,并显示控制台

	fillrectangle(200,50,500,100); // 造一个矩形,里面装文字。
	char arr[]="我是测试文字";
	int width =300/2 - textwidth(arr)/2;
	int height =50/2- textheight(arr)/2;
	outtextxy(width+300,height+50,arr);  //把文字放到方框内


	while(1){
		if(MouseHit())
		{
		
			MOUSEMSG msg = GetMouseMsg();

			switch(msg.uMsg)
			{
			case WM_LBUTTONDOWN: //左键按下
				if(msg.x > 200 && msg.x<500 && msg.y >50 && msg.y<100)
				{
					printf("你点击了正确位置!\n");
				}
				break;
			case WM_RBUTTONDOWN: //右键按下
				//printf("右键按下,当前坐标为(%d,%d)\n", msg.x, msg.y);
				outtextxy(400,400,"鼠标右键键按下");
				break;
			}
		}
	}
	
	getchar();				// 按任意键继续
	closegraph();			// 关闭绘图窗口
	return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【二分与分治】中间值、边界值、循环条件、模块写法(2)

二分法的模板写法:(1)标准的二分查找(寻找的值正好等于x的任意位置)int search(int A[], int n, int targ...

【C++图形化编程】flappy bird(1)—基础框架及图形图像

【C++图形化编程】flappy bird(1)—基础框架及图形图像

0.前言    前面一篇文章,我们简单介绍了鼠标的一些操作, 这篇文章,我们还是一个实战教程,flappy bird的小游戏。1.导入背景和音乐  &...

C++小游戏——简单飞机大战(2)——代码与显示优化

C++小游戏——简单飞机大战(2)——代码与显示优化

0.前言在上一篇中,我们在C++控制台中简单实现了飞机大战了逻辑,但是代码比较长,显示也不是很好看,这篇文章中,我们对上一篇的代码进行优化下,把很多过程封装成函数形式。让程序看上去更加精简。一个合理化...

【C++图形化编程】EasyX函数~图形绘制相关函数(1)

简介:EasyX有很多图形绘制函数,这篇文章简单介绍下:函数或函数类型说明arc画椭圆形circle画无填充的圆clearcircle清空圆形区域clearllipse清空椭圆形区域clearpie清...

C++小游戏—贪吃蛇(1)

0.前言c++小游戏来到了第二个,第二个小游戏是贪吃蛇。首先来分析一下需求。我们需要一个函数专门来绘制地图的。在地图上随机生成“食物”。按键函数,用来监听键盘事件。蛇的状态函数。移动函数等。1.参考代...

C++小游戏—简单飞机大战(1)

C++小游戏—简单飞机大战(1)

前面文章简单实现了弹球操作,这篇文章我们介绍一下如何实现简单的飞机大战操作。这篇文章我们要实现的效果如下:第一步:整体思路在某个点画出飞机的形状获取用户按下哪个按键根据按键移动飞机的位置按空格键发射子...