天天看點

Windows程式設計(七)--滑鼠

當滑鼠移過視窗的顯示區域時,視窗消息處理程式收到WM_MOUSEMOVE消息。當在視窗的顯示區域中按下或者釋放一個滑鼠按鍵時,視窗消息處理程式會接收到下面這些消息:

按下

釋放

按下(雙鍵)

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_LBUTTONDBLCLK

WM_MBUTTONDOWN

WM_MBUTTONUP

WM_MBUTTONDBLCLK

WM_RBUTTONDOWN

WM_RBUTTONUP

WM_RBUTTONDBLCLK

要接受到雙鍵消息,需要在wndclass.style處增加CS_DBLCLKS

在WM_MOUSEMOVE中,可以用LOWORD和HIWORD宏來提取滑鼠的位置:

wParam中包含資訊。MK字首代表「滑鼠按鍵」。

MK_LBUTTON

按下左鍵

MK_MBUTTON

按下中鍵

MK_RBUTTON

按下右鍵

MK_SHIFT

按下Shift鍵

MK_CONTROL

按下Ctrl鍵

當您把滑鼠移過視窗的顯示區域時,Windows并不為滑鼠的每個可能的圖素位置都産生一個WM_MOUSEMOVE消息。您的程式接收到WM_MOUSEMOVE消息的次數,依賴于滑鼠硬體,以及您的視窗消息處理程式在處理滑鼠移動消息時的速度。

視窗消息處理程式可以「攔截滑鼠」并且連續地接收滑鼠消息,即使此時滑鼠在該視窗顯示區域之外。您将在本章的後面學習如何攔截滑鼠。

如果正在顯示一個系統模态消息框或者系統模态對話框,那麼其它程式就不能接收滑鼠消息。當系統模态消息框或者對話框活動時,禁止切換到其它視窗或者程式。一個顯示系統模态消息框的例子,是當您關閉Windows時。

執行個體

Windows程式設計(七)--滑鼠

組合鍵測試

Windows程式設計(七)--滑鼠
Windows程式設計(七)--滑鼠

客戶區滑鼠消息簡單應用

Windows程式設計(七)--滑鼠

按下(輕按兩下)

WM_NCLBUTTONDOWN

WM_NCLBUTTONUP

WM_NCLBUTTONDBLCLK

WM_NCMBUTTONDOWN

WM_NCMBUTTONUP

WM_NCMBUTTONDBLCLK

WM_NCRBUTTONDOWN

WM_NCRBUTTONUP

WM_NCRBUTTONDBLCLK

可以用兩個Windows函數将螢幕坐标轉換為顯示區域坐标或者反之:

WM_NCHITTEST,它代表「非顯示區域命中測試」。此消息優先于所有其它的顯示區域和非顯示區域滑鼠消息。lParam參數含有滑鼠位置的x和y螢幕坐标,wParam 參數另有用途。

Windows應用程式通常把這個消息傳送給DefWindowProc,然後Windows用WM_NCHITTEST消息産生與滑鼠位置相關的所有其它滑鼠消息。對于非顯示區域滑鼠消息,在處理WM_NCHITTEST時,從DefWindowProc傳回的值将成為滑鼠消息中的wParam參數,這個值可以是任意非顯示區域滑鼠消息的wParam值再加上以下内容:

HTCLIENT

HTNOWHERE

HTTRANSPARENT

HTERROR

顯示區域

不在視窗中

視窗由另一個視窗覆寫

使DefWindowProc産生警示用的哔聲

如果DefWindowProc在其處理WM_NCHITTEST消息後傳回HTCLIENT,那麼Windows将把螢幕坐标轉換為顯示區域坐标并産生顯示區域滑鼠消息。

Windows程式設計(七)--滑鼠