【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({});