请教关于鼠标左键和右键的问题

1

正在制作一个扫雷游戏,现在对于鼠标事件判断的逻辑产生了问题,目前需要区分的鼠标点击事件有三个——鼠标左键单击一次、鼠标右键单击一次、鼠标左右键一起单击一次,但第三个必定会触发第一个或者第二个,问题初步认为是因为鼠标左右键不可能真正做到同时按下和放开,请问有没有更好的逻辑实现他们的区别?

现在逻辑如下:

鼠标左键单击逻辑(上次鼠标左键按下+右键未按下+当次鼠标左键未按下+当次右键未按下)

if ((lastMsg.mkLButton) && (!(lastMsg.mkRButton)) && (!(newMsg.mkLButton)) && (!(newMsg.mkRButton))//仅左键单击后放开
	{
		;
	}

鼠标右键单击逻辑(上次鼠标右键按下+右键未按下+当次鼠标右键未按下+当次左键未按下)

if ((lastMsg.mkRButton) && (!(lastMsg.mkLButton)) && (!(newMsg.mkRButton)) && (!(newMsg.mkLButton)))//仅右键单击后放开
	{
		;
	}

鼠标左右键一起单击一次逻辑(上次鼠标右键按下+上次右键按下+当次鼠标右键未按下+当次左键未按下)

if ((lastMsg.mkRButton) && (lastMsg.mkLButton) && (!(newMsg.mkRButton)) && (!(newMsg.mkLButton)))
	{
		;
	}

在每次鼠标左右键任意状态与上次不同时都会执行以上代码(顺序执行),并更新lastMsg为当次的值

ava
苍穹之上

2021-1-21

0

你需要判断鼠标消息中的 uMsg 成员,注意,WM_LBUTTONDOWN 和 WM_LBUTTONUP 事件是不同的。仔细观察扫雷游戏,例如左键单击,是在 WM_LBUTTONUP 事件发生的时候执行的,你可以延长按压左键的时间观察到这一点。

ava
慢羊羊

2021-1-21

技术讨论社区