滑鼠的使用概觀 (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 樣式位元,才能呼叫此方法。 |