WM_LBUTTONDOWN

WM-LBUTTONDOWN NOTIFICATION

簡介

WM_LBUTTONDOWN訊息當用戶在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;

相關搜尋

熱門詞條

聯絡我們