词条 | WM_LBUTTONDOWN |
释义 | WM-LBUTTODOWN NOTIFICATION简介WM_LBUTTONDOWN消息当用户在window客户区域点击鼠标左键的时候发送。如果当前鼠标没有被捕捉,消息发送给鼠标下面的window窗体。否则,消息发送给当前捕捉鼠标消息的方法。 window窗体通过WindowProc函数接收此消息。语法wParam 其他指示是否其它键被按下。此参数可以是以下的值: MK_CONTROL键盘CTRL键被按下。MK_LBUTTON鼠标左键被按下。MK_MBUTTON鼠标中键被按下。MK_RBUTTON鼠标右键被按下。MK_SHIFT键盘SHIFT键被按下。MK_XBUTTON1Windows 2000/XP: The first X button is down. MK_XBUTTON2Windows 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; |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。