滑鼠的使用概觀 (Windows Forms .NET)

接收和處理滑鼠輸入是每個 Windows 應用程式的重要部分。 您可以處理滑鼠事件以在應用程式中執行動作,或使用滑鼠位置資訊來執行點擊測試或其他動作。 此外,您還可以變更應用程式中的控制項處理滑鼠輸入的方式。 本文會詳細說明這些滑鼠事件,以及要如何取得和變更滑鼠的系統設定。

在 Windows Forms 中,使用者輸入會以 Windows 訊息的形式傳送至應用程式。 有一系列的可覆寫方法會在應用程式、表單和控制層級處理這些訊息。 這些方法在接收到滑鼠訊息時就會引發事件,而這些事件經處理後將可取得滑鼠輸入的相關資訊。 在許多情況下,Windows Forms 應用程式只要處理這些事件,就能處理所有使用者輸入。 在其他情況下,應用程式可能會覆寫處理訊息的其中一種方法,以在應用程式、表單或控制項接收到特定訊息之前加以攔截。

滑鼠事件

所有 Windows Forms 控制項都會繼承一組與滑鼠和鍵盤輸入相關的事件。 例如,控制項可以處理 MouseClick 事件,以判斷按一下滑鼠的位置。 如需滑鼠事件的詳細資訊,請參閱使用滑鼠事件

滑鼠位置和點擊測試

當使用者移動滑鼠時,作業系統會移動滑鼠指標。 滑鼠指標包含稱為作用點的單一像素,作業系統會追蹤此作用點,並將其辨識為指標的位置。 當使用者移動滑鼠或按滑鼠按鍵時,包含 HotSpot (部分機器翻譯) 的 Control (部分機器翻譯) 便會引發適當的滑鼠事件。

您可以在處理滑鼠事件時,或透過使用 Cursor (英文) 類別的 Position (英文) 屬性,以 MouseEventArgs (部分機器翻譯) 的 Location (英文) 屬性取得目前的滑鼠位置。 隨後,您可以使用滑鼠位置資訊來執行點擊測試,然後根據滑鼠的位置執行動作。 點擊測試功能內建於 Windows Forms 中的數個控制項,例如 ListView (部分機器翻譯)、TreeView (部分機器翻譯)、MonthCalendar (部分機器翻譯) 和 DataGridView (部分機器翻譯) 控制項。

點擊測試與適當的滑鼠事件搭配使用時 (例如 MouseHover),對於判斷應用程式何時應該執行特定動作非常有用。

變更滑鼠輸入設定

您可以藉由衍生自控制項並使用 GetStyle (英文) 和 SetStyle (部分機器翻譯) 方法,來偵測和變更控制項處理滑鼠輸入的方式。 SetStyle 方法會採用 ControlStyles 值的位元組合,來判斷控制項是否會有標準的按一下或按兩下行為,或者控制項是否會處理自己的滑鼠處理。 此外,SystemInformation 類別包含的屬性會描述滑鼠功能,並指定滑鼠如何與作業系統互動。 下表摘要說明這些屬性。

屬性 說明
DoubleClickSize 取得區域的大小 (以像素為單位),使用者在該區域中必須按兩次滑鼠,作業系統才會將這個按兩次滑鼠的動作視為按兩下。
DoubleClickTime 取得第一次按滑鼠動作和第二次按滑鼠動作間所允許的最大毫秒數,如此才能將滑鼠動作視為按兩下滑鼠。
MouseButtons 取得滑鼠上的按鈕數目。
MouseButtonsSwapped 取得值,指出是否已調換滑鼠左右按鈕的功能。
MouseHoverSize 取得矩型的維度 (以像素為單位),滑鼠指標必須在此範圍內停留一段滑鼠暫留時間,才能產生滑鼠暫留訊息。
MouseHoverTime 取得時間 (以毫秒為單位),滑鼠指標在該段時間內必須停留在停留矩形內,才能產生滑鼠停留訊息。
MousePresent 取得指出是否已安裝滑鼠的值。
MouseSpeed 取得指出目前滑鼠速度的值,從 1 到 20。
MouseWheelPresent 取得值,指出是否已安裝具有滑鼠滾輪的滑鼠。
MouseWheelScrollDelta 取得單一滑鼠滾輪旋轉增量的差異值數量。
MouseWheelScrollLines 取得轉動滑鼠滾輪時要捲動的行數。

處理使用者輸入訊息的方法

表單和控制項可以存取 IMessageFilter 介面和一組可覆寫的方法,以處理訊息佇列中不同點位的 Windows 訊息。 這些方法都有 Message 參數,會封裝 Windows 訊息的低階詳細資料。 您可以實作或覆寫這些方法以檢查訊息,然後取用訊息或將其傳遞給訊息佇列中的下一個取用者。 下表顯示處理 Windows Forms 中所有 Windows 訊息的方法。

方法 注意
PreFilterMessage 此方法會攔截已在應用層級排入佇列 (也稱為已發佈) 的 Windows 訊息。
PreProcessMessage 此方法會在 Windows 訊息進行處理之前,在表單和控制項層級加以攔截。
WndProc 此方法會在表單和控制項層級處理 Windows 訊息。
DefWndProc 此方法會在表單和控制層級執行 Windows 訊息的預設處理。 這會提供視窗的基本功能。
OnNotifyMessage 此方法會在訊息進行處理之後,在表單和控制項層級加以攔截。 必須設定 EnableNotifyMessage 樣式位元,才能呼叫此方法。

另請參閱