局部ExMessage型变量在多次循环中使用getmessage函数遇到问题

0

系统win10,编译环境vs2022c++

当在规定范围内点击鼠标左键后,mouse.lbuttong值变为true,随后进入了LogIn函数,照理来说下一次循环getmessage后如果没有动鼠标,那么mouse.lbuttong值应该为false,可是我在调试的时候看到mouse.lbuttong值仍旧为true,这是怎么回事?(我在login函数内部用了InputBox函数,我发现当我屏蔽掉这个函数后就没有如上问题了...)

while (TRUE)
{
	ExMessage mouse;
	mouse = getmessage(EM_MOUSE);
	
	if (210 <= mouse.x && mouse.x <= 330)//检测鼠标操作
		if (320 <= mouse.y && mouse.y <= 370)//检测是否在“登录”按钮范围内点击
			if (mouse.lbutton)
				LogIn();
}
ava
Huh?

2022-5-16

0

判断鼠标左键按下的消息时,应该判断 message 成员是否为 WM_LBUTTONDOWN,而不是判断 lbutton 成员是否为 true。

message 成员表示“当前消息是什么”,lbutton 表示“无论什么消息,当前左键的状态是什么”。

比如,对于“左键按下后移动鼠标”这一操作,会收到一个消息,其中 message == WM_LBUTTONDOWN。但是,在移动的过程中,会收到很多个 message == WM_MOUSEMOVE 的消息,同时 lbutton == true。所以,不要用 lbutton 判断“按下”事件。

你的代码这样调整:

while (TRUE)
{
	ExMessage mouse;
	mouse = getmessage(EM_MOUSE);
	
	if (mouse.message == WM_LBUTTONDOWN &&  //检测鼠标操作
		210 <= mouse.x && mouse.x <= 330 && 320 <= mouse.y && mouse.y <= 370)//检测是否在“登录”按钮范围内点击
			LogIn();
}
ava
xiongfj ◑◑

2022-5-18

谢谢你 - Huh? 2022-5-18
技术讨论社区