马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
注1:本文档由 Diu 翻译,小甲鱼校对。
注2:由于 WM_LBUTTONUP、WM_MBUTTONUP 和 WM_RBUTTONUP 三个消息基本一致(除了区分左中右),所以进行了合并。
WM_LBUTTONUP 消息原文链接 -> 传送门
WM_MBUTTONUP 消息原文链接 -> 传送门
WM_RBUTTONUP 消息原文链接 -> 传送门
消息含义:
当光标在窗口的客户区域,用户释放鼠标(左 | 中 | 右)键时便会发送该消息。如果鼠标没有被捕获,消息会发送给光标之下的窗口。否则,消息会发送给当前捕捉鼠标的窗口。
窗口通过自己的 WindowProc 函数接收该消息。
消息定义:
#define WM_LBUTTONUP 0x0202
#define WM_MBUTTONUP 0x0208
#define WM_RBUTTONUP 0x0205
参数解析:
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 坐标,坐标是相对于客户区域的左上角的。
注意(仅对于 WM_MBUTTONUP 消息):当一个快捷菜单出现(显示)时,坐标是相对屏幕的,而不是相对于客户区域。因为 TrackPopupMenu 函数是一个异步的调用,并且 WM_MBUTTONUP 通知并没有一个标志用来指示坐标推导,应用程序无法分辨在 lParam 中的 x,y 坐标是相对屏幕还是相对客户区域。
返回值:
如果处理了这个消息,应用程序应返回零。
备注:
1. 使用以下代码获取光标的横坐标与纵坐标:xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
2. 如上所述,x 坐标为返回值低位的 short 类型值;y 坐标为返回值高位的 short 类型值(都表示有符号值,因为他们能够在具有多个显示器的系统上取负值)。如果返回值被指定为一个变量,你可以使用 MAKEPOINTS 宏从返回值中获取一个 POINTS 结构。你也可以使用 GET_X_LPARAM 或 GET_Y_LPARAM 宏来提取 x 或 y 坐标。
重要:不要使用 LOWORD 或 HIWORD 宏来获取鼠标的 x 坐标与 y 坐标,因为这些宏在具有多个显示器的系统上会返回不正确的结果。有多个显示器的系统能有负的 x 坐标和 y 坐标,而 LOWORD 和 HIWORD 宏将坐标看作是无符号的量。
需求:
Minimum supported client | Windows 2000 专业版 [仅桌面应用程序] | Minimum supported server | Windows 2000 服务器版 [仅桌面应用程序] | Header | Winuser.h (包含于 Windows.h) |
【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。
|