WM_LBUTTONDOWN

更新时间:2024-09-10 10:28

WM_LBUTTONDOWN是一个Windows消息,该消息当用户在window客户区域点击鼠标左键的时候发送。如果当前鼠标没有被捕捉,消息发送给鼠标下面的window窗体。否则,消息发送给当前捕捉鼠标消息的方法。

简介

window窗体通过WindowProc函数接收此消息。

语法

wParam

其他参数

指示是否其它键被按下。此参数可以是以下的值:

MK_CONTROL

键盘CTRL键被按下。

MK_LBUTTON

鼠标左键被按下。

MK_MBUTTON

鼠标中键被按下。

MK_RBUTTON

鼠标右键被按下。

MK_SHIFT

键盘SHIFT键被按下。

MK_XBUTTON1

Windows 2000/XP: The first X button is down.

MK_XBUTTON2

Windows 2000/XP: The second X button is down.lParamlParam

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

如果程序处理了这个消息,返回0。

注意事项

使用以下代码获取光标的坐标:

1.xPos = GET_X_LPARAM(lParam);

2.yPos = GET_Y_LPARAM(lParam);

以上代码需要使用ATL库,定义在windowsx.h中您也可以使用MAKEPOINTS宏转换lParam参数到POINTS结构。

请注意,如下方法:

1.xPos = LOWORD(lParam);

2.yPos = HIWORD(lParam);

即使用LOWORD和HIWORD来获取坐标是不合适的,参考MSDN中对GetMessagePos函数的一段说明:Important Do not use the LOWORD or HIWORD macros to extract the x- and y- coordinates of the cursor position because these macros return incorrect results on systems with multiple monitors. Systems with multiple monitors can have negative x- and y- coordinates, and LOWORD and HIWORD treat the coordinates as unsigned quantities.简要翻译:不要使用LOWORD或HIWORD宏来获取鼠标位置,因为这两个宏在多显示器的系统中返回不正确的值。在多显示器的系统中可能会有负值的x和y轴的坐标,但LOWORD和HIWORD将坐标视为非负数。追根溯源,通过这几个宏的定义我们能够更好地理解这个问题:

typedef unsigned short WORD;

typedef unsigned long DWORD;

#define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff))#define HIWORD(l) ((WORD)((((DWORD_PTR)(l))> >16) & 0xffff))#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) 由上面的代码可以很明显的看出,HIWORD和LOWORD得到的东西会产生丢失负值的问题,而GET_X_LPARAM和GET_Y_LPARAM重新经过类型转换,保证了精度,要检测ATL键是否被按下Windows Message的缩写,请使用GetKeyState(VK_MENU)<0,注意,不能使用GetAsyncKeyState。

参数

WM_LBUTTONDOWN

WPARAM wParam

LPARAM lParam;

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}