第六课课后作业疑问,请高手解答一下
课程地址:https://fishc.com.cn/thread-48260-1-2.html题目中1. 编写程序:当鼠标左键和右键同时被按下时,提示“左右开弓,旗开得胜”,但如果单独点击鼠标左键或者右键均不做任何反馈。
窗口过程中
case WM_LBUTTONUP:
if (MK_RBUTTON == wParam)
{
MessageBox(hwnd, TEXT("左右开弓,旗开得胜!"), TEXT("竟然同时被按下了"), MB_OK);
}
return 0;
case 释放鼠标左键的消息后,判定是否右键被按下,对话框是左右鼠标松开后出来,左右两边状态都是up状态,为什么if判断的是右键被按下。还有就是wParam此时是MK_RBUTTON,而不是左键的MB,wParam是什么时候变成这个值了。 在这段代码中,我们可以看到在窗口过程中的 case WM_LBUTTONUP 中,通过判断 wParam 的值是否等于 MK_RBUTTON 来确定鼠标右键是否被按下。
首先,我们需要了解一下 WM_LBUTTONUP 消息是什么时候被触发的。 WM_LBUTTONUP 消息是在鼠标左键被释放时触发的,表示鼠标左键的松开动作。而 WM_RBUTTONUP 消息则表示鼠标右键的松开动作。
在这段代码中,我们只关心当鼠标左键和右键同时被按下时的情况。所以,我们需要在 case WM_LBUTTONUP 中判断鼠标右键是否被按下。如果 wParam 的值等于 MK_RBUTTON ,则表示鼠标右键也被按下了。
至于 wParam 的值为什么是 MK_RBUTTON ,而不是鼠标左键的消息 MB ,是因为在 WM_LBUTTONUP 消息中, wParam 的值表示鼠标的附加键状态。 MK_RBUTTON 是一个宏定义,表示鼠标右键的附加键状态。
所以,当我们在释放鼠标左键后,判断 wParam 的值是否等于 MK_RBUTTON ,就可以确定鼠标右键是否被按下,从而显示相应的提示对话框。 根据您提供的代码,我看到您正在使用Windows窗口消息处理程序来实现鼠标左键和右键同时按下的功能。在您的代码中,判断右键是否被按下的逻辑是在接收到释放鼠标左键的消息后进行的。
在Windows消息处理程序中,当鼠标左键被释放时触发WM_LBUTTONUP消息,而wParam参数用于传递消息的附加信息。在这种情况下,wParam的值将是一个标志,用于指示是否还有其他的鼠标键被按下。
根据您的描述,当释放鼠标左键时,您希望判断右键是否也被按下。在这种情况下,wParam的值将包含MK_RBUTTON标志,表示右键被按下。这是因为在Windows消息处理程序中,当多个鼠标键同时按下时,wParam的值将包含所有被按下的鼠标键的标志的组合。
因此,通过判断wParam的值是否包含MK_RBUTTON标志,您可以确定右键是否同时被按下。如果是,则显示提示消息框。
请注意,wParam的值在不同的消息中可能会有不同的含义。在处理鼠标消息时,您需要根据具体的消息类型和所需的功能来正确解析wParam的值。
希望这能解答您的疑问!如果您还有其他问题,请随时提问。
页:
[1]