青少年编程知识记录 codecoming

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

在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;  }



(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:趣味小程序 浏览: