鱼C论坛

 找回密码
 立即注册
查看: 318|回复: 2

第六课课后作业疑问,请高手解答一下

[复制链接]
发表于 2023-8-10 21:59:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
课程地址: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是什么时候变成这个值了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-10 21:59:57 | 显示全部楼层
在这段代码中,我们可以看到在窗口过程中的 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 ,就可以确定鼠标右键是否被按下,从而显示相应的提示对话框。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-11 09:58:20 | 显示全部楼层
根据您提供的代码,我看到您正在使用Windows窗口消息处理程序来实现鼠标左键和右键同时按下的功能。在您的代码中,判断右键是否被按下的逻辑是在接收到释放鼠标左键的消息后进行的。

在Windows消息处理程序中,当鼠标左键被释放时触发WM_LBUTTONUP消息,而wParam参数用于传递消息的附加信息。在这种情况下,wParam的值将是一个标志,用于指示是否还有其他的鼠标键被按下。

根据您的描述,当释放鼠标左键时,您希望判断右键是否也被按下。在这种情况下,wParam的值将包含MK_RBUTTON标志,表示右键被按下。这是因为在Windows消息处理程序中,当多个鼠标键同时按下时,wParam的值将包含所有被按下的鼠标键的标志的组合。

因此,通过判断wParam的值是否包含MK_RBUTTON标志,您可以确定右键是否同时被按下。如果是,则显示提示消息框。

请注意,wParam的值在不同的消息中可能会有不同的含义。在处理鼠标消息时,您需要根据具体的消息类型和所需的功能来正确解析wParam的值。

希望这能解答您的疑问!如果您还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 16:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表