EasyX处理鼠标事件慢

0

先上代码,这是一个检测到鼠标按下就往控制台输出“1”的demo

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<graphics.h>
using namespace std;
int main()
{
	initgraph(640, 480, SHOWCONSOLE);
	MOUSEMSG msg;
	while (1)
	{
		while (MouseHit())
		{
			msg = GetMouseMsg();
			switch (msg.uMsg)
			{
				case WM_LBUTTONDOWN:
					cout << 1 << endl;
					break;
				default:break;
			}
		}
	}
	_getch();
	return 0;
}

然而我发现一秒内能处理的点击事件数有限,当点击速度很快时会处理不过来,请问能如何修改我的代码?谢谢

ava
无名氏

2020-3-13

0

EasyX 处理鼠标消息并不慢,你的程序也没有问题。

问题出在你对鼠标事件的理解上。

当你在同一个位置连续点击时,第二次点击就会被判为 WM_LBUTTONDBLCLK(左键双击消息),而不是 WM_LBUTTONDOWN。

你可以做个尝试,当你在移动鼠标的过程中快速单击鼠标时,你会发现响应很快。

或者,你可以试试同时捕获别的消息,试试这个代码:

#include<iostream>
#include<conio.h>
#include<graphics.h>
using namespace std;
int main()
{
	initgraph(640, 480, SHOWCONSOLE);
	MOUSEMSG msg;
	while (1)
	{
		while (MouseHit())
		{
			msg = GetMouseMsg();
			switch (msg.uMsg)
			{
				case WM_LBUTTONDOWN:
					cout << 1;
					break;
				case WM_LBUTTONUP:
					cout << 2;
					break;
				case WM_LBUTTONDBLCLK:
					cout << 3;
					break;
			}
		}
	}
	_getch();
	return 0;
}
ava
慢羊羊

2020-3-13

明白了,那么要怎样做才能连续地识别点击而不是双击? -  无名氏  2020-3-13
@无名氏 试试最新版的 EasyX,已经默认取消了鼠标双击事件。详见 https://docs.easyx.cn/initgraph  -  慢羊羊  2020-3-15
技术讨论社区