鱼C论坛

 找回密码
 立即注册
查看: 3845|回复: 1

[API档案] WM_BUTTONDOWN 消息

[复制链接]
发表于 2016-5-11 16:32:06 | 显示全部楼层 |阅读模式

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

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

x
注1:本文档由 Diu 翻译,小甲鱼校对。

注2:由于 WM_LBUTTONDOWN、WM_MBUTTONDOWN 和 WM_RBUTTONDOWN 三个消息基本一致(除了区分左中右),所以进行了合并。

WM_LBUTTONDOWN 消息原文链接 -> 传送门

WM_MBUTTONDOWN 消息原文链接 -> 传送门

WM_RBUTTONDOWN 消息原文链接 -> 传送门

消息含义:

当光标在窗口的客户区域,用户按下鼠标(左 | 中 | 右)键时便会发送该消息。如果鼠标没有被捕获,消息会发送给光标之下的窗口。否则,消息会发送给当前捕捉鼠标的窗口。

窗口通过自己的 WindowProc 函数接收该消息。


消息定义:
#define WM_LBUTTONDOWN                  0x0201
#define WM_MBUTTONDOWN                  0x0207
#define WM_RBUTTONDOWN                  0x0204

参数解析:

wParam:指明不同的虚拟键是否被按下。该参数可以是下列值中的一个或多个:

含义
MK_CONTROL
(0x0008)
CTRL 键被按下
MK_LBUTTON
(0x0001)
鼠标左键被按下
MK_MBUTTON
(0x0010)
鼠标中键被按下
MK_RBUTTON
(0x0002)
鼠标右键被按下
MK_SHIFT
(0x0004)
SHIFT 键被按下
MK_XBUTTON1
(0x0020)
第一个 X 键被按下
MK_XBUTTON2
(0x0040)
第二个 X 键被按下

lParam:低字节表示光标的 X 坐标,高字节表示光标的 Y 坐标,坐标是相对于客户区域的左上角的。


返回值:

如果处理了这个消息,应用程序应返回零。


备注:

1. 使用以下代码获取光标的横坐标与纵坐标:
xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);
2. 如上所述,x 坐标为返回值低位的 short 类型值;y 坐标为返回值高位的 short 类型值(都表示有符号值,因为他们能够在具有多个显示器的系统上取负值)。如果返回值被指定为一个变量,你可以使用 MAKEPOINTS 宏从返回值中获取一个 POINTS 结构。你也可以使用 GET_X_LPARAMGET_Y_LPARAM 宏来提取 x 或 y 坐标。

重要:不要使用 LOWORDHIWORD 宏来获取鼠标的 x 坐标与 y 坐标,因为这些宏在具有多个显示器的系统上会返回不正确的结果。有多个显示器的系统能有负的 x 坐标和 y 坐标,而 LOWORDHIWORD 宏将坐标看作是无符号的量。

3.使用带有 VK_MENU 参数的 GetKeyState 函数的返回值是否小于零来检测 ALT 键是否被按下。注意,不能使用 GetAsyncKeyState 函数。


需求:

Minimum supported client Windows 2000 专业版 [仅桌面应用程序]
Minimum supported server Windows 2000 服务器版 [仅桌面应用程序]
Header Winuser.h (包含于 Windows.h)


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-14 12:55:27 | 显示全部楼层
占个楼吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 02:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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